1. 程式人生 > 其它 >C++STL(set……)

C++STL(set……)

set

底層實現是用紅黑樹。

set 建立

set<int> s; // 不可重,預設升序
set<int,less> s; // 不可重,升序
set<int,greater> s; // 不可重,降序
multiset<int> s; // 可重集

set 也可以過載,利用結構體實現。

過載方式同 priority_queue 。

set 插入及訪問

set<int>::iterator it;
s.insert(x); // 插入元素 x
s.begin(); // 最前面的迭代器
s.end(); // 最後一個元素之後的迭代器(實則空)
s.rbegin(); // 最後一個迭代器
s.rend(); // 最前面的前一個迭代器

pair<set<int>::iterator,bool> it=s.insert(x);
if(it.second) { 插入成功 }
else { 插入失敗 }

set 大小

set.size(); //返回容器中元素的數目
set.empty(); //判斷容器是否為空

set 的刪除操作

set.clear(); //清除所有元素
set.erase(it); //刪除 it 迭代器所指的元素,返回下一個元素的迭代器。
set.erase(l,r); //刪除區間 [l,r) 的所有元素,返回下一個元素的迭代器。
set.erase(x); //刪除容器中值為 x 的元素。

set 的查詢操作

set.find(x); //查詢 x 元素,返回指向 x 元素的迭代器。
set.count(x); //返回容器中值為 x 的元素個數。對 set 來說,要麼是 0,要麼是 1。對 multiset 來說,值可能大於 1。
set.lower_bound(x); //返回第一個 >=x 元素的迭代器
set.upper_bound(x); // 返回第一個 >x 元素的迭代器。
set.equal_range(x); //返回容器中與 x 相等的上下限的兩個迭代器。上限是閉區間,下限是開區間,如 [l,r) 。