概述:
关联容器,元素无重复,数据被组织成一棵红黑树
内部数据从小到大自动排序(也可从大到小)
set可以在时间复杂度为O(logN)的情况下插入,删除和查找数据。
set容器的定义:
set<类型> 对象名; 如:set<int> s;
set<类型,比较结构体> 对象名; 如:set<int,myComp> s; Set容器在插入时,默认情况下按从小到大的顺序存储,可以通过自定义比较结构体,按从大到小的顺序存储或者按照多个关键字序列插入。
插入:
.insert(x);
删除:
.erase(x); x可为元素值也可为迭代器
.erase(迭代器)
.erase(元素值)
.erase(迭代器1,迭代器2)
查找:
.lower_bound(x); 返回第一个大于等于x的数的地址(迭代器) 可用*访问其存储的值
.upper_bound(x); 返回第一个大于x的数的地址(迭代器)
如果所有元素都小于x,则返回最后一个数+1的位置,该位置是越界的
其他操作:
.size();
.clear();
.empty();
.find(x); 找到了,返回指向该元素的迭代器;没找到,返回s.end();
.count(x); x存在返回1,不存在返回0
定义新的迭代器:
int main()
{
set<int> v;
set<int>::iterator p;
v.insert(5);
v.insert(4);
v.insert(7);
v.insert(2);
v.insert(9);
for(p=v.begin(); p!=v.end(); p++)
cout<<*p<<' ';
return 0;
}
https://segmentfault.com/q/1010000004749623
set 结构体
struct rec {
int x,y;
bool operator<( const node&b )const {
if ( x==b.x ) return y<b.y;
return x>b.x;
}
};
multiset<rec> s;