標籤:getline logs clear ios html 樣本 src base cin
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;}
c++ set