STL容器——集合set簡單總結
集合set:
- 有序儲存元素,預設從小到大。
- 不會有重複元素,相同元素存入集合set後也只有一個。
- 內部利用了紅黑樹,檢索、插入、刪除等操作效率高。
#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; //對應的迭代器
若要自定義排序方式,需另外過載運算子