#include<set>
紅黑樹(Red-Black Tree),一種平衡二叉檢索樹。
對于插入相同鍵值的情況忽略處理。
set主要用于快速檢索
高效的插入和刪除
multiset、map、multimap都是平衡二叉檢索樹。
創建set集合:
set<int> s;
元素的插入與中序遍歷:
s.insert(3);
for(set<int>::iterator it = s.begin(); it != s.end(); ++it)cout << *it << " ";
元素的反向遍歷:
for(set<int>::reverse_iterator rit = s.rbegin(); rit != s.rend(); ++rit)cout << *rit << " ";
元素的刪除:
可以刪除某個迭代器位置上的元素、等于某鍵值的元素、一個區間上的元素
s.erase(4); //刪除鍵值為4的元素
清空集合
s.clear();
元素的檢索:
set<int>::iterator it = s.find(3); //如果找到,返回迭代器位置;如果未找到,返回end()。
自定義比較函數:
兩種方式:
1、元素是結構體,則直接重載操作符'<';
2、元素是基本元素,則構建一個結構體,里面重載'()'操作符,邏輯代碼實現比較功能。
struct desComp
{bool operator()(const int &a, const int &b){if (a != b) return a > b;else return a > b;}
}set<int, desComp>s;
s.insert(3);
... ...
for (set<int, desComp>::iterator it = s.begin(); it != s.end(); ++it)cout << *it << " ";