第4篇 关联式容器(associative)
来源:互联网 发布:抢购秒杀软件 编辑:程序博客网 时间:2024/05/18 03:38
关联式容器
标准的STL关联式容器分为set(集合)和map(映射表)两大类,以及这两大类的衍生体multiset(多键集合)和multimap(多键映射表)。这些容器的底层机制均以RB-tree完成。
SGI STL还提供了一个不在标准规格之列的关联式容器:hash table(散列表),以及以此为底层机制而完成的hash_set
(散列集合)、hash_map
(散列映射表)、hash_multiset
(散列多键集合)、hash_multimap
(散列多键映射表)。
关联式容器:每个元素都有一个键值(key)和一个实值(value)。当元素被插入到关联式容器中时,容器内部结构(可能是RB-tree,也可能是hash-table)便依照其键值大小,以某种特定规则将这个元素放置与适当位置。
1 树的简介
二叉树:一个二叉树如果不为空,便是一个根节点和左右两子树构成;左右子树都可能为空。
二叉搜索树:任何节点的键值一定大于其左子树中的每一个节点的键值、并小于其右子树中的每一个节点的键值。
平衡二叉搜索树:AVL-tree、RB-tree、AA-tree。
AVL-tree:任何节点的左右子树高度相差最多1.
RB-tree:这里算法里会详细介绍。
2 set
1) set的特性是所有元素都会根据元素的键值自动被排序;而且set元素的键值就是实值,是实值就是键值。set不允许两个元素有相同的键值。
2)set不允许通过迭代器来改变元素的值。因为set::iterator被定义为底层RB-tree的const_iterator。
3)STL特别提供了一组set/multiset相关算法,包括交集set_intersection
、联集set_union
、差集set_difference
、对称差集set_symmetric_difference
。
4)map的常用操作
//构造对象int ia[5] = {0,1,2,3,4};set<int> iset1;set<int> iset2(ia,ia+5);//插入元素iset2.insert(3);//删除元素iset2.erase(1);//计数iset2.count(3);//查找//1.此方法效率低,因为此只循序搜寻。set<int>::iterator iter1 = find(iset2.begin(),iset2.end(),3); //2.此方法效率较高,二叉查找树set<int>::iterator iter2 = iset2.find(3);//不可以试图通过迭代器来改变set元素*iter1 = 10; ///error
3 map
1)map的特性是,所有的元素都会根据元素的键值自动被排序。map的所有元素都是pair,同时拥有第二键值:实值(value)和第一元素:键值(key)。
template <class _T1, class _T2>struct pair { typedef _T1 first_type; typedef _T2 second_type; _T1 first; _T2 second; pair() : first(_T1()), second(_T2()) {} pair(const _T1& __a, const _T2& __b) : first(__a), second(__b) {}};
2)map的迭代器允许改变元素的实值,但是不可以改变元素的键值(因为Map的键值关系到map元素的排列规则)。
4 multiset
multiset的特性以及用法和set完全相同,唯一的差别在于它允许键值重复。
4 multimap
multimap的特性以及用法和map完全相同,唯一的差别在于它允许键值重复。
- 第4篇 关联式容器(associative)
- 五 关联式容器 associative containers
- 关联容器(Associative Container)
- STL associative containers(关联容器)
- 初学C++ associative container(关联容器)
- C++之关联容器(associative - container)简介
- Associative(关联)
- 关联(Associative)
- 第10章 关联容器
- 第10章 关联容器
- C++第十四天 关联容器
- 第11章-关联容器
- 第10章 关联容器
- 关联引用(associative reference)
- STL源码剖析 - 第5章 关联式容器 - set
- STL源码剖析 - 第5章 关联式容器 - map
- STL源码剖析 - 第5章 关联式容器 - multiset
- STL源码剖析 - 第5章 关联式容器 - multimap
- 抽象
- Servlet
- Python树形打印目录结构
- POJ 1064 Cable master 二分入门
- Lua_运算符_004
- 第4篇 关联式容器(associative)
- 从老板的裤裆拉链看 Google 管理之道
- Quaternion 四元数
- 容器在 Weave 中如何通信和隔离?- 每天5分钟玩转 Docker 容器技术(65)
- 浅谈windows下,shutdown.bat无法关闭tomcat服务器
- 二维RMQ求矩阵最值学习、
- 据说年薪30万的Android程序员必须知道的帖子
- QT
- Openpilot GCS Linux系统下开发环境安装