#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 << " ";