• STL容器 -- Map


    核心描述: map 就是从键(key) 到 值(value) 的一个映射.且键值不可重复,内部按照键值排序.

    头文件: #include <map>

    拓展: multimap 是一个多重映照容器,键值可以重复.unordered_set 是一个内部不排序的映射容器,需包含头文件<unordered_map> 

    构造方法:

    map<int, string> kvm; //构造一个键为 int 型, 值为 string 型的 map 

    元素的插入:

    kvm[1] = "abc";   // 值 "abc" 在 map 中的键值为 1                                                           ------方法1
    kvm.insert (map<int, string> :: value_type(2, "def")); // 值 "def" 在 map 中的键值为 2         ------方法2

    利用 find 查找:

    map<int, string> :: iterator it;//定义迭代器
    it = kvm.find(2);  //find 只能根据键查找,且find函数返回的是迭代器.
    if (it == kvm.end())  cout << "Not Found" <<endl;
    else cout << it->first << " " << it->second << endl; //利用 first 和 second 访问键 和 值.

    利用 count 查找:

    int cnt = kvm.count(2);  //count 按照查找的 键 返回找到的个数.由于不重复即只能返回 0 或 1

    根据键访问值:

    string ss = kvm[1]  //map 根据要访问的 "键" 返回 "键对应的值", 需要用 find 或者 count 判断 "键" 是否存在

    map 的删除:

    it = kvm.find(1);   
    kvm.erase(it);    //利用 find 找到键为 1的位置, 再通过迭代器删除元素          ---------方法1
    kvm.erase(1)     //删除键为 1 的元素, 成功返回 ”1“ 否则返回 ”0“           ---------方法2
    kvm.erase( kvm.begin(), kvm.end() );    //通过迭代器区间性删除, 区间为前闭后开   ---------方法3

    常用操作:

    kvm.clear()        //清空 map
    kvm.empty()    //判断 map 是否为空
    kvm.size()        //返回 map 中元素的个数

    其他查找函数:

    map<int, string> :: it;
    it = lower_bound(key);   //返回键值 大于等于 给定键值的第一个位置
    it = upper_bound(key);  //返回键值    大于     给定键值的第一个位置

    结构体类型的构造:

    struct NODE{
        int x; int y;
        bool operator < (const NODE& a) const{
            if(x == a.x) return y > a.y;//二级排序为 y 的降序
            return x < a.x; //以及排序为 x 的升序
        }
    };
    map<NODE, string> kvm; //必须重载结构体的 “<" 

    map 的遍历:

    map<int, string>::iterator it;
    for(it = kvm.begin(); it != kvm.end(); it++) {
        cout << it -> first  << "   " << it -> second << endl;
    }
  • 相关阅读:
    C# NAudio 变声
    初探Protostuff的使用
    CentOS7 配置阿里云yum源,非常之简单
    javacv 视频增加视频(画中画)
    抓包调试fiddler
    CentOS7 手动编译升级GCC至9.3.0
    C# CefSharp 新版本(83 以后版本) 如何在js中直接调用c#类
    毕业设计——驾驶证理论考试系统的设计与实现 2022年1月2日20:35:14
    送餐机器人乐动雷达记录
    linux下拉取git代码
  • 原文地址:https://www.cnblogs.com/Ash-ly/p/5874837.html
Copyright © 2020-2023  润新知