【stl学习笔记】set、multiset
2014-07-27 13:57
274 查看
set和multiset会根据特定的排序准则,自动将元素排序。两者不同处在于multiset允许元素重复而set不允许
在使用set或multiset之前,必须先加入头文件<set>
set和multiset通常以红黑树完成,红黑树在改变元素数量和元素搜寻方面很出色,它保证结点安插时最多只会作两个重新连接动作,而且到达某一元素的最长路径深度最多只是最短路径深度的两倍。
自动排序造成set和multiset的一个重要限制:不能直接改变元素值,这样会打乱原本正确的顺序。因此,要改变元素值,必须先删除旧元素,再插入新元素。
有两种方式可以定义排序准则:
1.以template参数定义
2.以构造函数参数定义
set和multiset的搜寻操作函数:
count(elem) 返回元素值为elem的元素个数
find(elem) 返回元素值为elem的第一个元素,如果找不到就返回end()
lower_bound(elem) 返回elem的第一个可安插位置,也就是元素值>=elem的第一个元素位置
upper_bound(elem) 返回elem的最后一个可安插位置,也就是元素值>elem的第一个元素位置
equal_range(elem) 返回elem可安插的第一个位置和最后一个位置,也就是元素值==elem的元素区间
输出:3 4 3 4
在使用set或multiset之前,必须先加入头文件<set>
set和multiset通常以红黑树完成,红黑树在改变元素数量和元素搜寻方面很出色,它保证结点安插时最多只会作两个重新连接动作,而且到达某一元素的最长路径深度最多只是最短路径深度的两倍。
自动排序造成set和multiset的一个重要限制:不能直接改变元素值,这样会打乱原本正确的顺序。因此,要改变元素值,必须先删除旧元素,再插入新元素。
有两种方式可以定义排序准则:
1.以template参数定义
2.以构造函数参数定义
set和multiset的搜寻操作函数:
count(elem) 返回元素值为elem的元素个数
find(elem) 返回元素值为elem的第一个元素,如果找不到就返回end()
lower_bound(elem) 返回elem的第一个可安插位置,也就是元素值>=elem的第一个元素位置
upper_bound(elem) 返回elem的最后一个可安插位置,也就是元素值>elem的第一个元素位置
equal_range(elem) 返回elem可安插的第一个位置和最后一个位置,也就是元素值==elem的元素区间
int main() { set<int>c; c.insert(1); c.insert(2); c.insert(3); c.insert(4); c.insert(5); c.insert(6); cout << *c.lower_bound(3) << endl; cout << *c.upper_bound(3) << endl; cout << *c.equal_range(3).first << " " << *c.equal_range(3).second << endl; }
输出:3 4 3 4
相关文章推荐
- STL学习笔记4--set and multiset
- STL学习笔记----5.容器 set 和 multiset
- STL学习笔记----5.容器 set 和 multiset
- 【学习笔记】C++高级程序设计:STL:Set 和 Multiset
- STL学习笔记-set/multiset容器(集合)
- C++ Primer 学习笔记_37_STL实践与分析(11)--set类型
- STL学习——hash_set/hash_map/hash_multiset/hash_multimap篇
- STL学习之set与multiset操作练习
- STL学习笔记-- set
- C++ STL学习笔记八 multiset多重集合容器
- STL笔记(4)-set/multiset,functor,pair的使用方法
- STL中的set和multiset学习小记
- 【学习笔记】 关于 Set 和 Multiset
- C++ STL关联容器 set和map学习笔记
- STL学习笔记-- multiset
- STL学习笔记 ---- 由set的声明所引发的自定义比较的实现方式
- STL学习笔记-- multiset
- STL学习笔记-- set
- STL之set&multiset容器(笔记)
- STL学习笔记7— —容器set和multiset