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

来源:互联网 发布:淘宝店铺企业认证 编辑:程序博客网 时间:2024/06/12 14:25

定义关联容器

  1. 初始化为另外一个同类型的拷贝
  2. C++11允许我们对关联容器值初始化,如
map<string, string> m = { {"1", "2"}, {"3", "4"} }

有序容器的关键字类型

  1. 必须满足严格弱序,可提供一个函数指针来代替运算符<,如
set<Sales_data, decltype(compareIsbn)*> bookstore(compareIsbn)
  1. map的元素pair操作有:
pair<T1, T2> ppair<T1, T2> p(v1, v2)pair<T1, T2> p = {v1, v2}make_pair(v1, v2)

关联容器类型别名

  1. key_type
  2. map_type map类型才有
  3. value_type 对于set,等价于key_type;对于map,为
pair<const key_type, mapped_type>
  1. set的迭代器和map的迭代器的first都是const,无法修改
  2. 关联容器一般不适用泛型算法

关联容器的元素插入

  1. c.insert(v) c.emplace(args) 返回一个pair
  2. c.insert(b, e) c.insert(il) 返回void
  3. c.insert(p, v) c.emplace(p, args) p为提示,返回一个pair
    注意:返回的pair->first为指向新增元素的迭代器;pair->second为bool值,表示是否插入或已经存在

map元素的下标操作

  1. c[k] 返回关键字为k的元素;若不存在,添加关键字为k的元素,并进行值初始化
  2. c.at(k) 返回关键字为k的元素;若不存在则抛出out_of_range的异常

查找操作

  1. c.find(k) 返回迭代器,执行第一个关键字为k的元素;不存在则返回尾后迭代器
  2. c.count(k) 返回关键字等于k的元素的数量
  3. c.lower_bound(k) 返回第一个关键字不小于k的元素
  4. c.upper_bound(k) 返回第一个关键字大于k的元素
  5. c.equal_range(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)
阅读全文
0 0
原创粉丝点击