zoukankan      html  css  js  c++  java
  • C++ Primer 笔记——关联容器

    1.关联容器支持高效的关键字查找和访问,标准库提供8个关联容器。

    2.如果一个类型定义了“行为正常”的 < 运算符,则它可以用作关键字类型。

    3.为了使用自己定义的类型,在定义multiset时必须提供两个类型:自定义类类型以及比较操作类型(函数指针)。

    class test
    {
    public:
        test(int i) { m_id = i; }
        int m_id;
    };
    
    bool compare_test(const test& t1, const test& t2)
    {
        return t1.m_id > t2.m_id;
    }
    
    std::multiset<test> test_set0;
    //test_set0.insert(test(5));        // 错误,test没有<运算符操作
    
    std::multiset<test, decltype(compare_test)*> test_set(compare_test);    // 构造函数里的compare_test可以写成&compare_test
    test_set.insert(test(5));    // 正确
    test_set.insert(test(4));    // 如果test_set的构造函数参数里没有compare_test,插入第二个元素就会报错,因为调用了一个空指针函数来比较
        

    4.pair的默认构造函数会对成员进行初始化。pair有如下操作:

    5.关联容器定义了额外的类型别名:

    一个map的value_type是一个pair,我们可以改变pair的值,但不能改变关键字成员的值。

    6.虽然set定义了 iterator 和 const_iterator 但是都是只读的,和map的关键字一样不允许修改。

    7.由于map和set包含不重复的关键字,因此插入一个已存在的元素对容器没有任何影响。

    8.关联容器的insert操作:

    对于不包含重复关键字的容器,添加单一元素的insert和emplace版本返回一个pair,pair的first是一个迭代器。指向具有给定关键字的元素,second是一个bool值,指出是插入成功还是已存在。

    9.关联容器的删除操作:

    • 对于保存不重复关键字的容器,erase的返回值总是0或1,若返回0.则表面想要删除的元素并不在容器中。
    • 对于重复关键字的容器,删除元素的数量可能大于1。

    10.关联容器的下标操作:

    • 当对一个map进行下标操作时,会获得一个mapped_type对象,但当解引用一个map迭代器时,会得到一个value_type对象。
    • map的下表运算符返回一个左值,既可以读也可以写。

    11.查找元素的操作:

    后面三个方法如果没有找到指定元素,则迭代器指向一个此元素可以插入的位置。

    12.新标准定义了4个无序关联容器,这些容器不是使用比较运算符来组织元素,而是使用一个哈希函数和关键字类型的==运算符。如果关键字类型固有就是无序的,或者性能测试发现问题可以用哈希技术解决,就可以使用无序容器。

    13.管理桶

  • 相关阅读:
    快排
    装载问题加强版
    從 Internet 安裝 Cygwin
    操作系统:基于页面置换算法的缓存原理详解(上)
    Java设计模式——适配器模式
    Unity 协程使用指南
    2015年总结
    基于正态分布的图片高斯模糊算法
    数据结构:关于AVL树的平衡旋转详解
    算法:关于生成抽样随机数的这些算法
  • 原文地址:https://www.cnblogs.com/zoneofmine/p/7265863.html
Copyright © 2011-2022 走看看