zoukankan      html  css  js  c++  java
  • map详解

    简述:

      map是stl的一种关联式容器,提供一对一的数据存储结构,第一个成为关键字,第二个为该关键字的值,在map中关键字只能出现一次。map的内部为一棵红黑树,具有自动排序功能,map会根据key值的大小进行非降序排序,当key值类型为string时为字典序。在map中查找插入删除的时间复杂度都是logn。

    定义:

    map<string,int> ma;//<key类型,val类型>
    map<string,int>::iterator it;//迭代器

    插入数据:

    insert函数:

    typedef pair<string,int> paa; 
    ma.insert(paa{"ab",1});

    但在同一个key值val不同时,insert只会生效第一次,所以用数组进行插入更优:

    ma["ab"]=1;
    ma["ab"]=2;
    cout<<ma["ab"];//会输出2 

    容量:

    ma.size();            map已经存在的映射数目

    ma.clear();          清空容器

    ma.empty();        判空

    迭代器参考位置:

    ma.begin();         初始位置迭代器

    ma.end();            末尾位置+1迭代器

    ma.rbegin();        逆序迭代器初始位置,即数据末尾元素位置

    ma.rend();           逆序迭代器终止位置,即元素初始位置-1

    查询:

    ma.count(x);               x作为key值是否在map中出现,出现返回1

    ma.find(x);                  查找作为key的x,找到返回迭代器位置,找不到返回ma.end();

    ma.lower_bound(x);   查找作为key的x,返回第一个大于等于的迭代器位置

    ma.upper_bound(x);  查找作为key的x,返回第一个大于的迭代器位置

    遍历:

    //迭代器方式 
    for(it=ma.begin();it!=ma.end();it++){
        cout<<it->first<<" "<<it->second<<endl;
    }
    ma[1]="ab";
    ma[2]="abc";
    //数组方式 
    for(int i=1;i<=2;i++){
        cout<<ma[i]<<" ";
    }

    这种方式只适用于key是整数类型,且连续才能用for遍历

    删除:

    通过key值删除:

    ma.erase(2);//删除key值为2的映射

    通过迭代器删除:

    it=ma.find(2);
    ma.erase(it); 

    注意在循环中ma.erase(it);会使迭代器失效,c++11会返回下一个迭代器位置可c++98就必须写成ma.erase(it++);

    之前说到map会自动根据key值排序,当我们将key的类型设置为结构体时,就要重载运算符了:

    struct node{
        int x,y;
        bool operator<(const node b)const
        {
        return this->x<b.x;
        }
    }a[50];

      

  • 相关阅读:
    计算一路话音消耗的带宽
    谋哥:我跟CEO们都说了啥
    wchar与char字符转换的探究
    pl/sql配置连接远程数据库oracle,本地没有安装oracle数据库的情况下
    围住浮动元素的三种方法
    Chromium浏览器组件设计意图
    tonymillion/Reachability的使用
    赵雅智_名片夹(3)_下拉刷新载入很多其它
    动态创建菜单和动态关联菜单项事件
    delphi创建动态菜单
  • 原文地址:https://www.cnblogs.com/qq2210446939/p/12466760.html
Copyright © 2011-2022 走看看