C++ primer 学习笔记(九)

charpter 11 关联容器

顺序容器中的元素是按在容器中的位置来顺序保存和访问的。而关联容器中的元素是按 关键字 来保存和访问的。

  • 标准库提供8种关联容器。允许重复关键字的容器的名字中都有multi。不保持关键字顺序存储的容器的名字都已unordered开头
  • map,set,multimap,multiset,unordered_map,unordered_set,unordered_multimap,unordered_multiset
  • map关联数组,与正常数组类似,不同之处在于其下标不必是整数,通过关键字来查找值而不是位置
  • map的简单使用map<关键字类型,值类型> 变量名map使用first保存关键字和second保存数值
  • set计时关键字的简单集合,当只想知道一个值是否存在,set是最有用的。
  • set简单实用set<T> 变量名
  • 关联容器支持普通容器操作,比如size,empty,insert,erase,clear,以及迭代器begin,end,不支持push_back之类的,关联容器都是双向的
  • multi容器,允许一个关键词对应多个元素
  • 自定义元素比较:multiset<关键词,decltype(func)*> 对象名(func)

    pair 类型

  • 头文件utility
  • pairp // pair>p(v1,v2)
  • 创建pair对象。列表初始化{a,b}、make_pair(a,b)、显示构造 pair<,>(a,b)

    关联容器操作

  • key_type: 关键词类型
  • mapped_type:值类型
  • value_type:set即为关键词类型,map为pair

    关联容器迭代器

  • 解引用关联容器迭代器得到是value_type的值
  • set的迭代器默认为const

    添加和删除元素

  • set添加元素,直接用.insert(begin,end)或者.insert({x,x,x});
  • map添加元素 ,插入的为pair
    • .insert({x,x})//
    • .insert(make_pair(x,x))
    • .insert(pair<,>(x,x))
    • .insert(map<,>::value_type(x,x))
  • insert的返回值:对于map,返回为pair,first为迭代器指向具有关键词的元素,second为bool值,表示插入成功。
  • 除了普通容器的删除方法,还可以直接删除.erase(关键词),返回值为删除关键词对应元素的个数
  • map的下标操作,可能会插入新元素,且map下标操作的返回值为mapped

    访问元素

  • 对于非重复关键字,.find和.count相同。用法:` .find(x),返回指向第一个关键字对应元素的迭代器,count返回出现个数
  • 在multimap或multiset中查找元素。使用count和find,遍历整个数组
  • .lower_bound(k),关键词不小于k的第一个元素,upper_bound,关键词大于k的第一个元素。均为迭代器,不适用无序容器

    无序容器

    。。。

charpter 12 动态内存