C++ Primer 第11章 知识点回顾

11.2.2关键字类型的要求

  1. 在实际编程中,重要的是,如果一个类型定义了“行为正常”的<运算符,则他可以用作关键字类型。
  2. 用来组织一个容器中元素的操作的类型也是该容器类型的一部分,为了指定使用自定义的操作,必须在定义关联容器类型是提供此操作的类型。自定义的操作类型必须在尖括号中紧跟元素类型给出
    //定义了比较函数,比较操作类型应该是一种函数指针类型
    multiset<Sales_data,decltype(compareIsbn)*> bookstore(compareIsbn);

  3. 在尖括号中出现的每个类型,就仅仅是一个类型而已。当我们创建一个容器对象时,才会以构造函数参数的形式提供真正的比较操作,其类型必须与在尖括号中指定的类型想吻合。在2中,用compareIsbn来初始化bookstore对象,忙着表示当我们想bookstore中添加元素时,通过调用compareIsbn来为这些元素排序。


11.3.1 关联容器迭代器

  1. map的value_type是一个pair类型,first成员保存const关键字,记住,关键字时const类型的。我们可以改变pair的值,但是不能改变关键字成员的值。
  2. 与不能改变map中元素的关键字一样,一个set中的关键字也是const的。
  3. 用迭代器遍历关联容器
  4. 我们通常不对关联容器使用泛型算法

11.3.2 添加元素

  1. 对于map和set,接受单个元素的insert返回一个pair,first是一个迭代器指向具有给定关键字的元素,second是bool指示是否添加成功
  2. 对于multimap和multiset,返回一个指向新元素的迭代器,无需bool值,因为总是成功添加
  3. 对于map和set,insert插入一个已经存在的元素,insert什么也不做

11.3.3 删除元素

  1. 特殊版本erase: c.erase(k);//从c中删除每个关键字为k的元素,翻译一个size_type值,指出删除的而元素的数量

11.3.4 map的下标操作

  1. set类型不支持下标,因为set中没有与关键字相关联的值
  2. 若关键字不在map中,下标操作会创建一个元素插入到map中,关联值进行值初始化
  3. 由于下标运算符可能插入一个新元素,我们只可以对非const的map使用下标操作

11.3.5 访问元素

  1. c.lower_bound(k);//返回一个迭代器,指向第一个关键字不小于k的元素
  2. c.upper_bound(k);//返回一个迭代器,指向第一个关键字大于k的元素
  3. 若1和2的返回值相同,说明元素不在容器中
  4. 若果关键字不在容器中,lower_bound会返回关键字的第一个安全插入点-————不影响容器中元素顺序的插入位置
  5. c.equal_range(k);//返回一个迭代器pair,表示关键字等于k的元素范围。若k不存在,pair的两个成员军等于c.end()
    11.3.6 一个单词转换程序

  6. 重要!!!:map的下标操作和insert操作的区别:trans_map[key]=value.substr(1);
    trans_map.insert({key,value.substr(1)});

    前者:若map中有相同的key,则最后一个相关的mapped_value值存入map中。后者:若map中有相同的key,什么都不做,即不会对原来key对应的mapped_value值造成任何影响


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值