美文网首页
Chapter 11 Assosiated container

Chapter 11 Assosiated container

作者: 再凌 | 来源:发表于2020-03-19 23:50 被阅读0次

    八种容器

    set -- map
    unordered
    multi-

    对于map, 传入的key必须有<运算符, 否则需要在第三个参数中说明自定义函数的指针, 可以写成decltype(F *), 其中F的返回值必须为bool类型

    map

    map中存储的每一个元素都是pair类型的, pair类型在<utility>头文件中.

    pair里有两个public的变量, first和second

    map中的三个类型:

    1. key_type: 即关键字类型
    2. value: pair<const key_type, mapped_type>类型
    3. mapped_type: 值的类型

    map容器一般不使用algorithm算法, 因为他的key是const类型, 不可以变动

    .insert()方法

    如果是map.insert(), 那么插入的必须是一个pair类型. insert()返回值也是一个pair, <指向被插入的位置的迭代器, bool>

    但是如果是multi-的insert(), 则返回值没有bool

    .erase()方法

    参数可以是迭代器, 迭代器范围或者关键字, 返回值是被删掉的个数

    [ ] 和at() 和find()

    对于map, 如果使用[ ], 如果遇到了不存在的关键字则自动插入,找到了则是mapped_type

    如果使用find(), 找不到的时候返回尾后迭代器, 找到了则返回迭代器

    如果是at(), 找不到的时候抛出out_of_range异常, 找到了则是value_type(即返回一个pair)

    掐范围

    .lower_band( k ) 返回不小于k的第一个迭代器
    .upper_band( k ) 返回大于k的第一个迭代器
    合在一起就是左闭右开区间

    .equal_range() 返回一个左闭右开的区间


    另一个掐范围的方法是.count()和.find()结合使用

    unordered_

    C++中使用hash来排列元素,用==判断不同元素, 而不是<排列元素

    unordered对于内置对象和常见的STL对象实现了HASH, 其他对象需要手动指定hash函数和==操作(或者重载实现)

    unordered_set<Sales_data, decltype(my_hash)*, decltype(eqop)*>
    
    构造hash函数的时候注意返回值是size_t类型, eq函数返回值是bool类型
    

    相关文章

      网友评论

          本文标题:Chapter 11 Assosiated container

          本文链接:https://www.haomeiwen.com/subject/zworyhtx.html