• Map基本用法


    Map的基本用法

    map内部使用的是红黑树,在map内部所有的数据都是有序的

    map插入有三种方法:

    insert(pair<int,string>(i,str));

    myMap.insert(map<int,string>::value_type(i,str));

    myMap[2] = "a";

    map遍历也有三种方法

    迭代器

    数组

    反向迭代器


    map删除数据使用erase函数,可以:

    用关键字某个元素

    迭代器删除某个元素

    迭代器删除某片元素

     

     

    map查找有三个元素

    find

    Lower_bound

    Upper_bound

    实例代码详解

    #include "stdafx.h"
    #include <map>
    #include <string>
    #include <iostream>
    using namespace std;

    int _tmain(int argc, _TCHAR* argv[])
    {
        map<int,string>myMap;
        string str;
        //******************************************************************
        for (int i = 0; i < 4;i++)
        {
            cin>>str;
            //map插入有三种方式
            //下面两种插入方式基本等同
            //map的关键字是唯一的,重复的话插入会失败
            //myMap.insert(pair<int,string>(i,str));
            //myMap.insert(map<int,string>::value_type(i,str));

            //检测插入失败的方法
            //下面pair的第一个变量返回的是map的迭代器(即你插入的map值),第二个是如果插入成功就是true,否则为false
            pair<map<int,string>::iterator,bool> insert_pair;
            insert_pair = myMap.insert(pair<int,string>(i,str));
            if (insert_pair.second == true)
            {
                cout<<insert_pair.first->first<<endl;
            }

            //还有一种就是数组方式插入,此时如果插入重复的话,后面的值会覆盖前面的
            //cout<<" 用数组的方式插入第一个map元素的重复值覆盖"<<endl;
            myMap[0] = "a";
            myMap[0] = "b";


        }

        //******************************************************************
        //map的遍历
        //迭代器遍历
        map<int,string>::iterator iter;
        cout<<" 迭代器遍历 "<<endl;
        for (iter = myMap.begin();iter != myMap.end();iter++)
        {
            cout<<iter->first<<" : "<<iter->second<<endl;
        }

        //方向迭代器遍历
        map<int,string>::reverse_iterator rev_iter;
        cout<<" 反向迭代器遍历 "<<endl;
        for (rev_iter = myMap.rbegin();rev_iter != myMap.rend();rev_iter++)
        {
            cout<<rev_iter->first<<" : "<<rev_iter->second<<endl;
        }

       
        //用数组的方式遍历下标还是从0开始的
        //输出的直接是map的值而不是关键字,全部输出要用上述方法
        int nSize = myMap.size();
        for (int i = 0;i < nSize;i++)
        {
            cout<<myMap[i]<<endl;
        }

        //******************************************************************
        //map中三种查找数据的方法
        //1.find函数找到后会返回该关键字的迭代器,否则等于end函数返回的迭代器
        cout<<" 使用find查找索引号为2的关键字 ";
        iter = myMap.find(2); //find的参数时map的关键字而不是值
        cout<<iter->first<<" : "<<iter->second<<endl;

        //2.使用count函数只能确定某个数据在不在map中,在的话返回1,否则0
        cout<<myMap.count(2)<<endl;

        //第三种方法是
        //Lower_bound函数用法,这个函数用来返回要查找关键字的下界(是一个迭代器)
        //Upper_bound函数用法,这个函数用来返回要查找关键字的上界(是一个迭代器)
        //此处略去


        //******************************************************************
        //数据的删除
        //需要用到erase函数
        //用迭代器删除
        myMap.erase(iter);//此时iter指向上面找到的2关键字的元素
        //也可以直接用关键字删除
        myMap.erase(2);
        //用迭代器成片删除
        myMap.erase(myMap.begin(),myMap.end());

        getchar();
        getchar();
        return 0;
    }

    // STLTest.cpp : 定义控制台应用程序的入口点。
    //

    #include "stdafx.h"
    #include <map>
    #include <string>
    #include <iostream>
    using namespace std;

    int _tmain(int argc, _TCHAR* argv[])
    {
        map<int,string>myMap;
        string str;
        //******************************************************************
        for (int i = 0; i < 4;i++)
        {
            cin>>str;
            //map插入有三种方式
            //下面两种插入方式基本等同
            //map的关键字是唯一的,重复的话插入会失败
            //myMap.insert(pair<int,string>(i,str));
            //myMap.insert(map<int,string>::value_type(i,str));

            //检测插入失败的方法
            //下面pair的第一个变量返回的是map的迭代器(即你插入的map值),第二个是如果插入成功就是true,否则为false
            pair<map<int,string>::iterator,bool> insert_pair;
            insert_pair = myMap.insert(pair<int,string>(i,str));
            if (insert_pair.second == true)
            {
                cout<<insert_pair.first->first<<endl;
            }

            //还有一种就是数组方式插入,此时如果插入重复的话,后面的值会覆盖前面的
            //cout<<" 用数组的方式插入第一个map元素的重复值覆盖"<<endl;
            myMap[0] = "a";
            myMap[0] = "b";


        }

        //******************************************************************
        //map的遍历
        //迭代器遍历
        map<int,string>::iterator iter;
        cout<<" 迭代器遍历 "<<endl;
        for (iter = myMap.begin();iter != myMap.end();iter++)
        {
            cout<<iter->first<<" : "<<iter->second<<endl;
        }

        //方向迭代器遍历
        map<int,string>::reverse_iterator rev_iter;
        cout<<" 反向迭代器遍历 "<<endl;
        for (rev_iter = myMap.rbegin();rev_iter != myMap.rend();rev_iter++)
        {
            cout<<rev_iter->first<<" : "<<rev_iter->second<<endl;
        }

       
        //用数组的方式遍历下标还是从0开始的
        //输出的直接是map的值而不是关键字,全部输出要用上述方法
        int nSize = myMap.size();
        for (int i = 0;i < nSize;i++)
        {
            cout<<myMap[i]<<endl;
        }

        //******************************************************************
        //map中三种查找数据的方法
        //1.find函数找到后会返回该关键字的迭代器,否则等于end函数返回的迭代器
        cout<<" 使用find查找索引号为2的关键字 ";
        iter = myMap.find(2); //find的参数时map的关键字而不是值
        cout<<iter->first<<" : "<<iter->second<<endl;

        //2.使用count函数只能确定某个数据在不在map中,在的话返回1,否则0
        cout<<myMap.count(2)<<endl;

        //第三种方法是
        //Lower_bound函数用法,这个函数用来返回要查找关键字的下界(是一个迭代器)
        //Upper_bound函数用法,这个函数用来返回要查找关键字的上界(是一个迭代器)
        //此处略去


        //******************************************************************
        //数据的删除
        //需要用到erase函数
        //用迭代器删除
        myMap.erase(iter);//此时iter指向上面找到的2关键字的元素
        //也可以直接用关键字删除
        myMap.erase(2);
        //用迭代器成片删除
        myMap.erase(myMap.begin(),myMap.end());

        getchar();
        getchar();
        return 0;
    }

    map

  • 相关阅读:
    ABP理论学习之Swagger UI集成
    最佳加法表达式
    洛谷 P1736 创意吃鱼法
    洛谷P1387 最大正方形
    1078 最小生成树
    判断元素是否存在
    1531 山峰 【栈的应用】
    洛谷 P2335 [SDOI2005]位图
    矿藏估价
    二分法小结
  • 原文地址:https://www.cnblogs.com/Mr-Zhong/p/4370491.html
Copyright © 2020-2023  润新知