zoukankan      html  css  js  c++  java
  • 1.2常见C++STL 映射表

    一、映射表

    1、映射表

    映射:两个集合之间的对应关系,一个元素对应另一个元素

    C++中map函数定义在<map>头文件中,将代码引入头文件

    #include<map>
    using namespace std;

    2、构造映射

    map<T1,T2> m 定义一个名为m,从T1到T2的映射,这时候m是一个空映射,map<string ,int> t    定义了一个从string 到int 的映射,我们可以把一个字符串和一个整数关联起来

    3、插入一对映射insert()

    insert()是向集合中插入一个新映射,参数是pair

    pair 是标准库类型,定义在头文件utility,参数有两个,一个first,另一个second,并且重载<运算符,先比较first,再比较second,当我们创建一个pair,必须提供两个类型

    例如 pair<string,int> t    定义一个保存string和int的pair类型的变量t

    make_pair(T1,T2) 返回由T1和T2组成的初始化的pair

    加入映射的过程就是插入pair的过程,如果插入的时候key已经存在,就不会插入新的value代替以前的value,也就是这次插入无效

    #include<iostream>
    #include<map>
    #include<utility>
    using namespace std;
    int main(){
        map<string,int> dict;     //定义了一个从姓名到班级的映射,key:姓名   value:班级  初始化是空
        dict.insert(make_pair("Tom",1));    //{"Tom"->1}
        dict.insert(make_pair("Jack",2));   //{"Tom"->1,"Jack"->2}
        dict.insert(make_pair("Jack",3));   //{"Tom"->1,"Jack"->2},"Jack"在集合已经存在
        }
    }

    4、访问映射

    dict【“Jack”】,访问“Jack”对应的值,如果“Jack”在集合中不存在,那么返回集合对应的初始值,int是0,string是空字符串

    但是我们有时候仅仅是想做一个查找的操作,并不是想要插入映射,所以我们要提前检验映射是否存在,然后查找映射对应的值

    5、判断关键字是否存在

    判断关键字是否存在,可以使用count()函数,如果关键字存在返回1,不存在返回06、

    #include<iostream>
    #include<map>
    #include<utility>
    using namespace std;
    int main(){
        map<string,int> dict;     //定义了一个从姓名到班级的映射,key:姓名   value:班级  初始化是空
        dict.insert(make_pair("Tom",1));    //{"Tom"->1}
        dict.insert(make_pair("Jack",2));   //{"Tom"->1,"Jack"->2}
        dict.insert(make_pair("Jack",3));   //{"Tom"->1,"Jack"->2},"Jack"在集合已经存在
        if(dict.count("Jack")){     //判断 “Jack”是否存在
            cout << "Jack" << dict["Jack"] << endl;
        }else{
            cout << "Jack不存在" << endl;
        }
    }
    }

    6、映射迭代器

    (*it).first 指向关键字,(*it).second指向关键字对应的值,C++遍历的过程是按照关键字从小到大排列的,和集合类似

    #include<iostream>
    #include<map>
    #include<utility>
    using namespace std;
    int main(){
        map<string,int> dict;     //定义了一个从姓名到班级的映射,key:姓名   value:班级  初始化是空
        dict.insert(make_pair("Tom",1));    //{"Tom"->1}
        dict.insert(make_pair("Jack",2));   //{"Tom"->1,"Jack"->2}
        dict.insert(make_pair("Jack",3));   //{"Tom"->1,"Jack"->2},"Jack"在集合已经存在
        for(map<string,int>::iterator it = dict.begin(); it != dict.end();it++){
            cout <<(*it).first << " " << (*it).second << endl; //first是关键值,second是对应的值
        }
    }

    7、清空映射

    调用clear()函数清空集合元素和内存

    C++map官方文档 :http://www.cplusplus.com/reference/map/map/erase/

    二、二维映射

    类似vector套vector,二维映射采用map套set,例如一个班有很多学生,我们使用set来存储班级姓名,

    定义数据结构  map<int ,set<string> > 定义班级到班级对应所有学生姓名的映射,两个 >中间的空格不能少,例如对2班同学我们执行,dict[2].insert("Jack")从2班插入学生jack

    还可以map 套map

  • 相关阅读:
    webService入门理解
    spring 事物的一些理解
    代码规范
    Linux安装SSH服务
    java == 与 equals 相同与不同点
    ubuntu安装mysql
    SQL夯实基础(一):inner join、outer join和cross join的区别
    C#进阶之路(二):事件
    C#进阶之路(一):委托
    快速排序 Quick Sort
  • 原文地址:https://www.cnblogs.com/xiaoming521/p/15687424.html
Copyright © 2011-2022 走看看