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

2021-01-24  本文已影响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;
    }
}
上一篇下一篇

猜你喜欢

热点阅读