set和unorded_set都是只读的,因为是基于排序的容器,直接更改元素会破坏其内部结构。
如果直接存储对象,那么默认都是拷贝语义,STL容器中的数据更改是不会影响到原数据的
set
提供了有序、唯一的容器。
内部实现通常是基于红黑树(自平衡AVL)实现
multiset则可以重复,因为插入时不会监测数据,故可以插入重复数据,而set会检测重复数据,但也会进行排序
插入、删除、操作上都是O(logn)
set常见操作
-
set<T> st;
//默认构造 -
set<const set &st>;
//拷贝构造 -
set& operator=(const set &st);
//重载等号操作符 -
insert(const T& value)
//插入元素,若元素已存在,则不会改变set -
erase(const T& value)
//通过指定元素值来删除元素 -
find(const T& value)
//查找给定值的元素,返回一个指向该元素的迭代器,若是没找到返回end() -
size()
//返回set元素数量 -
count(key)
//返回key的元素个数 -
遍历可以使用
std::set iterator
来遍历,迭代将按元素的排序顺序进行
排序:
默认按照从小到大,