set 容器存储互不相同的元素,使之有序的容器。
在一个set中,元素的值不能修改(总是常量元素),但它们可以被插入或删除。
内部通常由自平衡二叉搜索树实现。
下面是示例代码
#include<iostream> #include<set> using namespace std; int main() { set<int> s; s.insert(20); s.insert(30); s.insert(10); cout<<"myset contains:"; while(!s.empty()) { cout<<‘ ‘<<*s.begin(); s.erase(s.begin()); } cout<<endl; int myints[]={21,64,17,78,49}; set<int> myset(myints,myints+5); set<int>::reverse_iterator rit; cout<<"myset contains:"; for(rit=myset.rbegin();rit!=myset.rend();++rit) { cout<<‘ ‘<<*rit; } cout<<endl; myset.clear(); for(int i=1;i<10;i++) myset.insert(i*10); set<int>::iterator it=myset.begin(); ++it; myset.erase(it); //删除迭代器位置的数即20 myset.erase(40); //删除40 it=myset.find(60); //查找某个数的迭代器 myset.erase(it,myset.end()); //删除这一段 cout<<"myset contains:"; for(it=myset.begin();it!=myset.end();++it) { cout<<‘ ‘<<*it; } cout<<endl; myset.clear(); for(int i=1;i<10;i++) myset.insert(i*10); set<int>::iterator itlow=myset.lower_bound(30); //返回>=30的第一个迭代器 set<int>::iterator itup=myset.upper_bound(60); //返回>60的第一个迭代器 myset.erase(itlow,itup); cout<<"myset contains:"; for(set<int>::iterator it=myset.begin();it!=myset.end();++it) { cout<<‘ ‘<<*it; } cout<<endl; return 0; }
set
与multiset
的差别在于multiset
允许多个元素的值相同。
若使用multiset
,erase(x)
会删除所有值为 xx 的元素。
unordered_set 是无序的集合,能够较快地检索,本质上是 哈希表。
下面是示例代码 我没太弄懂这里面的bucket和hash
#include<iostream> #include<string> #include<unordered_set> using namespace std; int main() { unordered_set<string> myset={"red","green","blue"}; string input; getline(cin,input); //const_iterator迭代器是不能改变其所指向的元素的值的 unordered_set<string>::const_iterator got=myset.find(input); if(got==myset.end()) cout<<"not found in myset"; else cout<<*got<<" is in myset"; cout<<endl; return 0; }
时间: 2024-10-07 20:49:41