您的位置:首页 > 编程语言 > C语言/C++

读书笔记《C++ Primer》第五版——第十一章 关联容器

2017-11-25 23:03 381 查看

定义关联容器

初始化为另外一个同类型的拷贝

C++11允许我们对关联容器值初始化,如

map<string, string> m = { {"1", "2"}, {"3", "4"} }


有序容器的关键字类型

必须满足严格弱序,可提供一个函数指针来代替运算符<,如

set<Sales_data, decltype(compareIsbn)*> bookstore(compareIsbn)


map的元素pair操作有:

pair<T1, T2> p
pair<T1, T2> p(v1, v2)
pair<T1, T2> p = {v1, v2}
make_pair(v1, v2)


关联容器类型别名

key_type

map_type map类型才有

value_type 对于set,等价于key_type;对于map,为

pair<const key_type, mapped_type>


set的迭代器和map的迭代器的first都是const,无法修改

关联容器一般不适用泛型算法

关联容器的元素插入

c.insert(v) c.emplace(args) 返回一个pair

c.insert(b, e) c.insert(il) 返回void

c.insert(p, v) c.emplace(p, args) p为提示,返回一个pair

注意:返回的pair->first为指向新增元素的迭代器;pair->second为bool值,表示是否插入或已经存在

map元素的下标操作

c[k] 返回关键字为k的元素;若不存在,添加关键字为k的元素,并进行值初始化

c.at(k) 返回关键字为k的元素;若不存在则抛出out_of_range的异常

查找操作

c.find(k) 返回迭代器,执行第一个关键字为k的元素;不存在则返回尾后迭代器

c.count(k) 返回关键字等于k的元素的数量

c.lower_bound(k) 返回第一个关键字不小于k的元素

c.upper_bound(k) 返回第一个关键字大于k的元素

c.equal_r
9243
ange(k) 返回一个pair,first=c.lower_bound(k), second=c.upper_bound(k)

无序容器

无序容器必须提供hash模板,标准库为内置类型、string、智能指针定义了hash,可提供函数来完成无序容器的构造,如:

unordered_multiset<Sales_data, decltype(hasher)*, decltype(eqOp)*> bookStore(42, haser, eqOp)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: