链接:https://vjudge.net/problem/UVA-10815
集合和元素也是两个常用的容器,set就是数学上的集合——每个元素最多只出现一次。单词不区分大小写。set的特性是所有元素的值会自动排序,且不允许有两个相同的元素。
set集合容器:实现了红黑树的平衡二叉树的数据结构,插入元素时,它会自动调整二叉树的排列,把元素放到适当的位置,以保证每个子树根节点键值大于左子树所有节点的键值,小于右子树所有节点的键值;且要保证根节点左子树的高度与右子树高度相等。平衡二叉检索树使用中序遍历算法,检索效率高于vector、deque和list等容器,另使用中序遍历可将键值按照从小到大遍历出来。构造set集合主要目的是为了快速检索,不可直接去修改键值。
#include <iostream> #include <string> #include <set> #include <sstream> using namespace std; set<string> dict;//string 集合 int main() { string s,buf; while(cin>>s) { for(int i=0;i<s.size();i++) { if(isalpha(s[i])) s[i]=tolower(s[i]); else s[i]=' '; } stringstream ss(s); while(ss>>buf) dict.insert(buf); } for(set<string>::iterator it=dict.begin();it!=dict.end();it++) cout<<*it<<endl; return 0; }
#include <iostream> #include <set> using namespace std; int main() { int arr[5]= {0,1,2,3,3}; set<int> iset(arr,arr+5); iset.insert(5); cout<<"size:"<<iset.size()<<endl; cout<<"3 count ="<<iset.count(3)<<endl; iset.erase(1); set<int>::iterator ite1=iset.begin(); set<int>::iterator ite2=iset.end(); for(; ite1!=ite2; ite1++) cout<<*ite1; cout<<endl; ite1=iset.find(3); if(ite1!=iset.end()) cout<<"3 found"<<endl; ite1=iset.find(1); if(ite1!=iset.end()) cout<<"1 not found"<<endl; set<int> s; s.insert(1); s.insert(2); s.insert(3); s.insert(1); cout<<"set的size值为:"<<s.size()<<endl;//元素个数 cout<<"set的maxsize的值为:"<<s.max_size()<<endl;//容器可能包含的元素最大个数 cout<<"set 中的第一个元素是 :"<<*s.begin()<<endl; cout<<"set 中的最后一个元素是:"<<*s.end()<<endl; cout<<"------------------------------"<<endl; for(set<int>::iterator it=s.begin(); it!=s.end(); it++) cout<<*it<<endl; cout<<"The time of 1:"<<s.count(1)<<endl; cout<<"The time of 4:"<<s.count(4)<<endl; cout<<endl; pair<set<int>::const_iterator,set<int>::const_iterator> pr; pr=s.equal_range(3);//equal_range() 返回一堆定位器,分别表示第一个大于或等于给定关键值的元素 cout<<"The first equal or greater than 3 is:"<<*pr.first<<endl; cout<<"The second greater than 3 is:"<<*pr.second<<endl; cout<<"---"<<endl<<endl; s.clear(); if(s.empty()) cout<<"set is empty!"<<endl; cout<<"The size of set:"<<s.size()<<endl; cout<<"The max_size of set:"<<s.max_size()<<endl; return 0; }