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<<"\n用数组的方式插入第一个map元素的重复值覆盖"<<endl;
        myMap[0] = "a";
        myMap[0] = "b";

}

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

//方向迭代器遍历
    map<int,string>::reverse_iterator rev_iter;
    cout<<"\n反向迭代器遍历\n"<<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<<"\n使用find查找索引号为2的关键字\n";
    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<<"\n用数组的方式插入第一个map元素的重复值覆盖"<<endl;
        myMap[0] = "a";
        myMap[0] = "b";

}

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

//方向迭代器遍历
    map<int,string>::reverse_iterator rev_iter;
    cout<<"\n反向迭代器遍历\n"<<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<<"\n使用find查找索引号为2的关键字\n";
    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基本用法的更多相关文章

  1. c++map的用法 分类: POJ 2015-06-19 18:36 11人阅读 评论(0) 收藏

    c++map的用法 分类: 资料 2012-11-14 21:26 10573人阅读 评论(0) 收藏 举报 最全的c++map的用法 此文是复制来的0.0 1. map最基本的构造函数: map&l ...

  2. STL中map的用法

    map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候 ...

  3. C++11中map的用法

    最全的c++map的用法 1. map最基本的构造函数:map<string ,int>mapstring; map<int,string >mapint;map<sri ...

  4. entrySet用法 以及遍历map的用法

    entrySet用法 以及遍历map的用法   keySet是键的集合,Set里面的类型即key的类型entrySet是 键-值 对的集合,Set里面的类型是Map.Entry   1.keySet( ...

  5. python map 常见用法

    python map 常见用法2017年02月01日 19:32:41 淇怪君 阅读数:548版权声明:欢迎转载,转载请注明出处 https://blog.csdn.net/Tifficial/art ...

  6. 8 map的用法

    what's map go里面的map和python字典差不多. 类似其他语言中的哈希表或者字典,以key-value的形式存储的数据 key必须是支持==或者!=比较运算的类型,不可以是函数.map ...

  7. forEach、for+i、map的用法及区别

      array.forEach(callback[, thisObject]); 下面是参数的详细信息: 1. callback : 函数测试数组的每个元素. 2.thisObject : 对象作为该 ...

  8. set/multiset和map/multimap用法小结

    二叉搜索树是ACM中经常需要用到的数据结构,熟练掌握map和set的用法很关键,现对其做一个简单的总结. 主要的功能有:插入元素,查找元素,删除,遍历/反向遍历. 插入,删除和查找操作的时间都和树的高 ...

  9. STL 之 map的用法

    Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候 ...

  10. js数组中foEach和map的用法详解 jq中的$.each和$.map

    数组中foEach和map的用法详解 相同点: 1.都是循环遍历数组(仅仅是数组)中的每一项. 2.forEach() 和 map() 里面每一次执行匿名函数都支持3个参数:数组中的当前项value, ...

随机推荐

  1. uva 10038 - Jolly Jumpers

    #include <iostream> #include <cstdio> #include <stdlib.h> using namespace std; ], ...

  2. php测试题整理(0519)

    1.B/S架构和C/S架构: B/S架构是依托于浏览器的网络系统,C/S架构是基于客户端的. B/S架构: 随着Internet和WWW的流行,以往的主机/终端和C/S都无法满足当前的全球网络开放.互 ...

  3. ASP.NET MVC 4.0的Action Filter

    有时候你想在调用action方法之前或者action方法之后处理一些逻辑,为了支持这个,ASP.NET MVC允许你自定义创建action过滤器.Action过滤器是自定义的Attributes,用来 ...

  4. Python新手学习基础之数据类型——数字类型

    创建一组数字 Python 的有以下几种内置数字类型: int,整型,比如:1.-2.598: float,浮点型,比如:0.0.-3.5.18.55: bool,布尔型,即True和False两个关 ...

  5. cf Sereja and Array

    http://codeforces.com/contest/315/problem/B #include <cstdio> #include <cstring> #includ ...

  6. KEIL中的变量相关

    例:sfr P0=0x80表示P0口地址为80H:(sfr是字节操作) sfr16 T2=0xCC表示T2口地址的低地址为TL2=0XCC,高地址为TH2=0XCD(sfr16是字操作) 头文件reg ...

  7. PowerShell 字符串操作符

    字符串操作符 格式化操作符 –F 在PowerShell文本操作符中非常重要,经常被用来增强数字类型和日期类型的可读性: "{0} diskettes per CD" -f (72 ...

  8. 第27讲 UI组件之 ScrollView与底部动态添加数据

    第27讲 UI组件之 ScrollView与底部动态添加数据 1. ScrollView(滚动视图) ScrollView(滚动视图)是实现滚动的一个控件,只需要将需要滚动的控件添加到ScrollVi ...

  9. log4j 突然不打印记录,提示:No appenders could be found for logge,处理方法

    log4j 一直都在使用正常,log4j.xml配置.代码都没有修改,突然不打印记录,出现下面提示: log4j:WARN No appenders could be found for logger ...

  10. 基于css制作轮播图的部分效果

    在轮播图中,我们可以通过鼠标在特定位置上的滑动来实现元素背景的改变.通常在制作轮播图时,我们首先想到的是js中的交互.可是,如果我们无法使用js,只能单纯的靠css又该如何实现这一效果呢?下面,本人将 ...