【STL】STL中红黑树的应用set、multiset、map、multimap
来源:互联网 发布:文豆php培训学校 编辑:程序博客网 时间:2024/05/21 19:34
上一篇博客介绍了红黑树的实现,下面介绍红黑树的应用,在STL中容器set和map,以及multiset和multimap底层实现都是红黑树。
set
set的底层就是用红黑树实现的,set的特性,所有元素都会根据元素的键值自动地排序。set元素的键值就是实值。set不允许两个元素有相同的键值。
迭代器
1、set不能通过迭代器修改set元素值。
因为set元素值就是键值关系到set元素排序规则,迭代器底层被定义为RB-tree的const_iterator。
2、set迭代器进行插入删除操作后,迭代器仍然有效
set构造函数
(1)explicit set ( const Compare& comp = Compare(), const Allocator& = Allocator() );(2)template <class InputIterator> set ( InputIterator first, InputIterator last, const Compare& comp = Compare(), const Allocator& = Allocator() );(3)set ( const set<Key,Compare,Allocator>& x );
(1)默认的空的构造函数,
(2)迭代器构造函数,范围[first,end)。
(3)拷贝构造函数,
熟悉的函数,就不介绍了
可以看C++文档
http://www.cplusplus.com/reference/set/set/?kw=set
find函数
set有自定义的find函数,比STL中算法提供的find函数更高效。
iterator find ( const key_type& x ) const;
查找成功的话,返回这个元素的迭代器,否则返回end。
count函数
作用:查找set中是否有这个元素
返回值:成功返回1,没有找到返回0
size_type count ( const key_type& x ) const;
lower_bound和upper_bound函数
set也有自定义的lower_bound和upper_bound函数。
iterator lower_bound ( const key_type& x ) const;iterator upper_bound ( const key_type& x ) const;
lower_bound函数是查找不小于x的值,即第一个等于x或者第一个大于x的迭代器。
upper_bound函数是查找第一个比x大的值的迭代器。
equal_range函数
pair<iterator,iterator> equal_range ( const key_type& x ) const;
获取x元素的范围,
返回值是迭代器的键值对,其实就是lower_bound和upper_bound。
测试代码
set<int> myset; pair<set<int>::iterator,set<int>::iterator> ret; for (int i=1; i<=5; i++) myset.insert(i*10); // set: 10 20 30 40 50 ret = myset.equal_range(30); cout << "lower bound points to: " << *ret.first << endl; //30 cout << "upper bound points to: " << *ret.second << endl; //40
multiset
multiset的特性以及用法与set完全相同,唯一的差别就是multiset允许键值重复,即可插入相同的元素。底层是RB-tree的insert_equal函数
map
1、map同样底层实现也是红黑树,map的特性是,所有元素都会根据元素的键值自动地排序,map所有的元素都是pari,同时拥有实值和键值,pari第一元素被视为键值,第二元素是实值
2、map不允许插入两个键值相同的元素。
3、map不允许通过迭代器修改map的元素的键值,与set同理;但是可以修改元素的实值。
4、map有与list相同的某些性质,插入和删除后,迭代器仍然有效。
map函数
map的相关函数与set类似,基本上用法都相同
http://www.cplusplus.com/reference/map/map/?kw=map
multimap
multimap的特性以及用法与map完全相同,唯一的差别就是它允许键值重复,它的底层机制是RB-tree的insert_equal。
- 【STL】STL中红黑树的应用set、multiset、map、multimap
- STL map, multimap, set, multiset 函数介绍
- STL容器 set、 multiset、map、multimap
- C++ STL之 map\set\multimap\multiset
- STL概览-关联容器set,multiset,map,multimap(四)
- STL set multiset map multimap unordered_set unordered_map example
- STL源码剖析之map set multimap multiset【2013.12.10】
- stl中的map、set、multimap、multiset,兼谈OceanBase造轮子
- STL中HashTable HashMap HashSet Set Map MultiSet MultiMap总结
- STL有4种联合容器(set,multiset, map, multimap)
- STL总结之set/multiset和map/multimap
- STL 之 初识set multiset(map multimap)
- 八、STL中的关联容器set/multiset、map/multimap
- 初识STL——set,multiset,map,multimap
- STL模板总结归纳(set,multiset和map,multimap)
- stl的set,multiset, map, multimap, deque, list, stack, queue, priority_queue
- STL中hashtable,hashset,hashmap,set,map,multiset和multimap的区别
- STL中map,multimap,set,multiset,unordered_map,unordered_multimap,unordered_set,unordered_multiset的实现方法
- 签名涂鸦手写板
- 欧拉回路定义(HDU
- JDK——Unsupported major.minor version 52.0问题解决
- Scala 语法
- 工信科软(北京)信息技术研究院专业办理信息系统集成资质、安防资质、ITSS,CMMI,涉密资质等
- 【STL】STL中红黑树的应用set、multiset、map、multimap
- POJ
- loadrunner之关联取随机参数
- 链接
- 小程序post请求乱码记录
- Remmarguts' Date POJ
- 使用ADF上传文件到服务器
- Python学习(pip更新和三方插件安装)
- 快速排序法(十三)