美文网首页
黑马C++视频笔记《STL之map/multimap》

黑马C++视频笔记《STL之map/multimap》

作者: 井底蛙蛙呱呱呱 | 来源:发表于2021-01-24 01:02 被阅读0次
    /* map/multimap容器
     * map/multimap属于关联式容器,底层结构是用二叉树实现。
     *  - map中所有元素都是pair;
     *  - pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值);
     *  - 所有元素都会根据元素的键值自动排序;
     *
     * 优点:可以根据key值(键)快速找到value值.
     *
     * map和multimap的区别:
     *  - map不允许容器中有重复key值元素;
     *  - multimap允许容器中有重复key值元素.
     *
     * map构造:
     *  - `map<T1, T2> m;`,默认构造函数;
     *  - `map(const map & m);`,拷贝构造函数;
     *
     * 赋值:
     *  - `map& operator=(const map &m);`, 重载等号操作符.
     *
     * 大小和交换:
     *  - `size();`,返回容器中元素的数目;
     *  - `empty();`,判断容器是否为空;
     *  - `swap(map);`,交换两个map容器中的数据;
     *
     * 插入和删除:
     *  - `insert(elem);`,在容器中插入元素,多种插入方式:
     *      map<int, int> m;
     *      (1)`m.insert(pair<int, int>(1, 10));`;
     *      (2)`m.insert(make_pair(2, 20));`;
     *      (3)`m.insert(map<int, int>::value_type(3,30);`;
     *      (4)`m[4]=40;`
     *      在上面四种插入方法中,虽然第4种最简单,但是第4中容易出错,如`m[5];`看起来像是在取value值,
     *      但是这个操作其实创建了一个新的key-value对,只不过value是用默认值来进行填充的.
     *  - `clear();`,清除所有元素;
     *  - `erase(pos);`,删除pos迭代器所指的元素,返回下一个元素的迭代器;
     *  - `erase(beg, end);`,删除区间[beg, end)的所有元素,返回下一个元素的迭代器;
     *  - `erase(key);`,删除容器中值为key的元素.
     *
     * 查找和统计:
     *  - `find(key);`,查找key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end();
     *  - `count(key);`,统计key的元素的个数.
     *
     * 排序:与set排序基本相同,我们可以利用仿函数来改变插入数据时候的排序规则.
     */
    

    一个栗子:

    //
    // Created by shexuan on 2021/1/23.
    //
    
    #include <iostream>
    #include <string>
    #include <map>
    using namespace std;
    
    class myCompare{
    public:
        // 记住这里加const,不然后报错
        bool operator()(int v1, int v2) const {
            // 降序
            return v1>v2;
        }
    };
    
    int main(){
        map<int, int, myCompare> m;
        m.insert(pair<int, int>(1,10));
        m.insert(pair<int, int>(2,20));
        m.insert(pair<int, int>(3,30));
        m.insert(pair<int, int>(4,40));
        m.insert(pair<int, int>(5,50));
    
        for (map<int, int, myCompare>::iterator it=m.begin();it!=m.end();it++){
            cout << "first: " << it->first << " second: " << it->second << endl;
        }
    }

    相关文章

      网友评论

          本文标题:黑马C++视频笔记《STL之map/multimap》

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