STL set
阿新 • • 發佈:2017-10-31
col 元素允許重復 t對象 容器 gin code 使用 targe 否則
感謝http://blog.csdn.net/ac_hexin/article/details/52042562
set
如果需要集合中的元素允許重復那麽可以使用multiset
1.創建set集合對象
創建set對象時,需要指定元素的類型,這一點和其他容器一樣。
1 set<int> s;
2.元素的插入與中序遍歷
采用inset()方法把元素插入到集合中,插入規則在默認的比較規則下,是按元素值從小到大插入,如果自己指定了比較規則函數,則按自定義比較規則函數插入。使用前向叠代器對集合中序遍歷,結果正好是元素排序後的結果。
1 s.insert(5); //第一次插入5,可以插入 2 s.insert(1); 3 s.insert(6); 4 s.insert(3); 5 s.insert(5); //第二次插入5,重復元素,不會插入 6 set<int>::iterator it; //定義前向叠代器 7 //中序遍歷集合中的所有元素 8 for(it = s.begin(); it != s.end(); it++) 9 { 10 cout << *it << " "; 11 }
3.元素的方向遍歷
使用反向叠代器reverse_iterator可以反向遍歷集合,輸出的結果正好是集合元素的反向排序結果。
它需要用到rbegin()和rend()兩個方法,它們分別給出了反向遍歷的開始位置和結束位置。
1 set<int>::reverse_iterator rit; //定義反向叠代器 2 //反向遍歷集合中的所有元素 3 for(rit = s.rbegin(); rit != s.rend(); rit++) 4 { 5 cout << *rit << " "; 6 }
4.元素的檢索
使用find()方法對集合進行檢索,如果找到查找的的鍵值,則返回該鍵值的叠代器位置;否則,返回集合最後一個元素後面的一個位置,即end()。
1 set<int>::iterator it; 2 it = s.find(6); //查找鍵值為6的元素 3 if(it != s.end()) 4 cout << *it << endl; 5 else 6 cout << "not find it" << endl;
5.元素刪除
可以直接刪鍵值,也可以刪除一個叠代器
1 s.erase(6); //刪除鍵值為6的元素 2 it=s.begin(); 3 it=s.erase(it); //返回新的第一個元素
還可以刪除一個區間的數:
1 for (int i=1; i<10; i++) myset.insert(i*10); // 10 20 30 40 50 60 70 80 90 2 itlow=myset.lower_bound (30); ^ 3 itup=myset.upper_bound (60); ^ 4 myset.erase(itlow,itup); // 10 20 70 80 90
Set常用函數:
1 begin()--返回指向第一個元素的叠代器 2 clear()--清除所有元素 3 count()--返回某個值元素的個數 4 empty()--如果集合為空,返回true 5 end()--返回指向最後一個元素的叠代器 6 erase()--刪除集合中的元素 7 find()--返回一個指向被查找到元素的叠代器 8 insert()--在集合中插入元素 9 lower_bound()--返回指向大於(或等於)某值的第一個元素的叠代器 10 rbegin()--返回指向集合中最後一個元素的反向叠代器 11 rend()--返回指向集合中第一個元素的反向叠代器 12 upper_bound()--返回大於某個值元素的叠代器
STL set