c++ set的常用用法
平衡二叉檢索樹使用中序遍歷演算法,檢索效率高於vector、deque和list等容器,另外使用中序遍歷可將鍵值按照從小到大遍歷出來。
構造set集合主要目的是為了快速檢索,不可直接去修改鍵值。
常用操作:
1.元素插入:insert()
2.中序遍歷:類似vector遍歷(用迭代器)
3.反向遍歷:利用反向迭代器reverse_iterator。
例:
set<int> s;
......
set<int>::reverse_iterator rit;
for(rit=s.rbegin();rit!=s.rend();rit++)
4.元素刪除:與插入一樣,可以高效的刪除,並自動調整使紅黑樹平衡。
set<int> s;
s.erase(2); //刪除鍵值為2的元素
s.clear();
5.元素檢索:find(),若找到,返回該鍵值迭代器的位置,否則,返回最後一個元素後面一個位置。
set<int> s;
set<int>::iterator it;
it=s.find(5); //查詢鍵值為5的元素
if(it!=s.end()) //找到
cout<<*it<<endl;
else //未找到
cout<<"未找到";
6.自定義比較函式
(1)元素不是結構體:
例:
//自定義比較函式myComp,過載“()”操作符
struct myComp
{
bool operator()(const your_type &a,const your_type &b)
[
return a.data-b.data>0;
}
}
set<int,myComp>s;
......
set<int,myComp>::iterator it;
(2)如果元素是結構體,可以直接將比較函式寫在結構體內。
例:
struct Info
{
string name;
float score;
//過載“<”操作符,自定義排序規則
bool operator < (const Info &a) const
{
//按score從大到小排列
return a.score<score;
}
}
set<Info> s;
......
set<Info>::iterator it;