/* set/multiset容器
* set/multiset属于关联容器,底层结构是用二叉树实现,所有元素都会在插入时自动排序.
*
* set和multiset的区别:
* - set不允许容器中有重复元素;
* - multiset允许容器中有重复元素;
*
* 构造函数:
* - `set<T> st;`,默认构造函数;
* - `set(const set &st);`,拷贝构造函数;
*
* 赋值:
* - `set& operator=(const set &st);`,重载等号运算符.
*
* 大小和交换:
* - `size();`,返回容器中元素的数量;
* - `empty();`,判断容器是否为空;
* - `swap();`,交换两个容器集合.
*
* 插入与删除:
* - `insert(elem);`,在set中插入数据;对于set,返回pair(set<T>::iterator, bool),若bool为true则表明插入成功,若是插入重复元素则会返回false;
* 而对于multiset,则是返回set<T>::iterator.
* - `clear();`,清除所有数据;
* - `erase(iterator_pos);`,删除pos迭代器所指的元素,返回下一个元素的迭代器;
* - `erase(iterator_beg, iterator_end);`,删除区间[beg, end)中的所有元素,返回下一个元素的迭代器;
* - `erase(elem);`,删除容器中值为elem的元素.
*
* 查找和统计:
* - `find(key);`,查找key是否存在,若存在,返回该键的元素的迭代器,若不存在,则返回set.end();
* - `count(key);`,统计key的元素个数;对于set而言,count结果只有0和1(set元素不重复),而对于multiset而言则是返回key的计数。
*
*
* pair对组:成对出现的数据,利用对组可以返回两个数据.
* 创建方式:
* - `pair<type1, type2> p(val1, val2);`;
* - `pair<type1, type2> p = make_pair(val1, val2);`。
*
* pair对组数据访问:p.first返回第一个元素val1,p.second返回第二个元素val2.
*
*
* 利用仿函数可以改变set容器的排序方式:
* - `set<type, myCompare> s;`, 在声明set时传入一个仿函数myCompare,myCompare中指定了如何进行排序.
*
* 注:set中存放自定义数据类型时必须定义一个排序的仿函数,不然编译器不知道怎么对自定义数据类型进行排序.
*/
网友评论