C++ 学习笔记(11)关联容器、桶
2018-02-02 23:53
609 查看
C++ 学习笔记(11)关联容器、桶
参考书籍:《C++ Primer 5th》API:关联容器
11.2 关联容器概述
11.2.2 关键字类型的要求
对于有序容器(map、multimap、set、multiset),关键字类型必须定义元素比较的方法。默认使用<运算符来比较。
在自定义
<运算符时,必须定义为严格弱序(strict weak ordering):即小于等于,性质如下:
两个关键字不能同时小于等于对方。
如果k1小于等于k2,k2小于等于k3,那么k1必须小于等于k3。
如果两个关键字都不小于等于对方,那么这两个关键字等价。
设置比较类型时(multiset的第二个参数),应该是一种函数指针类型。
11.2.3 pair类型
11.3 关联容器操作
11.3.1 关联容器迭代器
map的key是const的,set的key也是const的。通常不对关联容器使用泛型算法,如果要,那就当作源序列(copy到一个序列)或者当作一个目的位置(调用inserter绑定插入器)。
11.3.2 添加元素
std::map<string, int> m; // 四种插入值的方法。 m.insert({ "a",1 }); m.insert(make_pair("b", 22)); m.insert(pair<string, int>("c", 333)); m.insert(map<string, int>::value_type("d", 4444));
insert和emplace返回值是一个pair,frist成员是迭代器(指向给定关键字的元素),second是bool,表明元素是否成功插入(已在容器的不插入,返回false)。
11.3.3 删除元素
erase的返回值是删除元素的数量,即对于可重复关键字容器,返回值可能大于1.
11.3.4 map的下标操作
11.3.5 访问元素
multimap和multiset中多个元素相同关键字时,这些元素会相邻存储。
// 获取相同元素3种方法 multimap<int, string> m{ { 1,"a" },{ 2,"b" },{ 1,"c" },{ 1,"d" } }; // 方法1:使用find和count int count = m.count(1); // 查找关键字是1的个数(3个)。 auto it = m.find(1); // 查找第一个关键字是1的迭代器。 for (size_t i = 0; i < count; ++i, ++it) cout << it->second << endl; // 输出所有相同关键字的值:a c d // 方法2:使用lower_bound(返回第一个不小于给定Key的迭代器)和upper_bound(返回第一个大于给定Key的迭代器) for (auto beg = m.lower_bound(1), end = m.upper_bound(1); beg != end; ++beg) cout << beg->second << endl; // 方法3:使用euqal_range,得到一个pair,first等价lower_bound结果,second等价upper_bound结果。 for (auto pos = m.equal_range(1); pos.first != pos.second; ++pos.first) cout << pos.first->second << endl;
11.4 无序容器
无序容器在存储上组织为一组桶,每个桶保存0个或多个元素,使用一个哈希函数将元素映射到桶。相同哈希值的元素会在同一个桶中。
计算元素的哈希值和在桶中搜索通常都是很快的操作。
不能直接定义关键字类型是自定义类型的无序容器,因为要使用哈希模版,所以必须同时提供自定义hash模版版本(需要提供函数代替==运算符(函数指针)和哈希值计算函数(函数指针))。
相关文章推荐
- C++学习笔记--关联容器
- C++学习笔记22——关联容器之map
- 笔记:C++学习之旅---关联容器
- C++学习笔记十-关联容器
- C++ STL关联容器 set和map学习笔记
- C++学习笔记-关联容器
- C++学习笔记2.2 : 容器和算法之关联容器
- C++学习笔记23——关联容器之set
- C++基础的不能再基础的学习笔记——关联容器
- C++ 学习笔记 2.1 : 容器和算法(顺序容器、关联容器、泛型算法)
- C++学习笔记十-关联容器
- C++学习笔记【第二部分第十一章:关联容器】
- c++学习笔记之关联容器
- C++ Primer学习笔记2--c++ 关联容器
- boolan——c++学习笔记之容器
- c++ Map关联容器学习(一)
- C/C++学习笔记:基础知识11
- c++ 11学习笔记-- 常量表达式(constexpr)
- 学习C++——关联容器
- C++学习笔记之容器:顺序容器