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

原文地址:https://www.cnblogs.com/Mr-Zhong/p/4370491.html