1. 程式人生 > >STL set

STL set

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