1. 程式人生 > >STL容器——集合set簡單總結

STL容器——集合set簡單總結

集合set:

  1. 有序儲存元素,預設從小到大。
  2. 不會有重複元素,相同元素存入集合set後也只有一個。
  3. 內部利用了紅黑樹,檢索、插入、刪除等操作效率高。

#include<set>
using namespace std;
set<data_type> s;

插入

s.insert (key_value)

將key_value插入到set中,返回值是pair<set::iterator,bool>,bool標誌著插入是否成功,而iterator代表插入的位置,若key_value已經在set中,則iterator表示的key_value在set中的位置

s.insert (first,second)

將迭代器first到second之間的元素插入到set中,返回值是void


刪除

s.erase (iterator)

刪除迭代器iterator指向的值

s.erase (first,second)

刪除迭代器first和second之間的值

s.erase (key_value)

刪除鍵值key_value的值

s.clear ()

將集合清空


查詢

s.find (key_value)

返回key_value所在位置的迭代器,沒找到會返回s.end()

s.lower_bound (key_value)

返回第一個大於等於key_value的定位器

s.upper_bound (key_value)

返回最後一個大於等於key_value的定位器

s.count (key_value)

用來查詢集合中某個鍵值出現的次數,但在集合中非0即1;
所以該函式可以判斷key_value是否存在於該集合中


遍歷

s.begin ()

返回一個迭代器,指向集合中第一個元素

s.end ()

返回一個迭代器,指向集合中最後一個元素

正常遍歷:
set<data_type>::iterator iter;   //迭代器
for(iter=s.begin();iter!=s.end();iter++)
{
	...
}

注:①不能使用 iter<s.end()
  ② iter在這裡類似於指標,可以用 * iter取值


  
s.rbegin ()

返回一個逆序迭代器,指向集合的最後一個元素

s.rend ()

返回一個逆序迭代器,指向集合的第一個元素

反向遍歷:
set<data_type>::reverse_iterator r_iter;   //反向迭代器
for(r_iter=s.rbegin();r_iter!=s.rend();r_iter++)
{
	...
}

其他常用函式

s.empty ()

判斷集合是否為空,集合為空返回true,否則返回false

s.size ()

返回當前集合中的元素個數

s.max_size ()

返回set容器可能包含的元素最大個數


此外,因為set中元素是預設從小到大排序的,若要令其從大到小排序需如下定義

set<data_type , greater<data_type>> s;
set<data_type , greater<data_type>>::iterator iter;      //對應的迭代器

若要自定義排序方式,需另外過載運算子