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. u盘禁用

    Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\USBSTOR]" ...

  2. jquery实现简单鼠标经过图片预览效果

    html结构:<div class="prebtn"><img src=""/></div> css代码:#preview{ ...

  3. 利用redis协助mysql数据库搬迁

    最近公司新项目上线,需要数据库搬迁,但新版本和老版本数据库差距比较大,关系也比较复杂.如果用传统办法,需要撰写很多mysql脚本,工程量虽然不大,但对于没有dba的公司来说,稍微有点难度.本人就勉为其 ...

  4. [Flask Security]当不能通过认证的时候制定跳转

    Flask Security这个插件能对用户权限进行很好的控制. 通过三个model实现: User,存放用户数据 Role,存放角色数据 User_Role.存放用户角色信息 user_datast ...

  5. iOS中设置导航栏标题的字体颜色和大小

    iOS中设置导航栏标题的字体颜色和大小,有需要的朋友可以参考下. 在平时开发项目的时候,难免会遇到修改导航栏字体大小和颜色的需求,一般使用自定义视图的方法,其实还存在一种方法. 方法一:(自定义视图的 ...

  6. Chrome下的语音控制框架MyVoix.js使用篇(一)

    日前因工作需求,着手研究了语音识别技术,发现github上有网友发布了一款叫做voix.js的javascript框架.在拜读voix.js的源码后发现了不少问题,于是自己写了一款语音识别框架MyVo ...

  7. FJ省队集训DAY2 T1

    思路:转换成n条三维空间的直线,求最大的集合使得两两有交点. 有两种情况:第一种是以某2条直线为平面,这时候只要统计这个平面上有几条斜率不同的直线就可以了 还有一种是全部交于同一点,这个也只要判断就可 ...

  8. Mysql unix_timestamp() FROM_UNIXTIME和DATE_FORMAT(date,format)

    mysql 中:UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date) 若无参数调用,则返回一个 Unix timestamp ('1970-01-01 00:00:00' GM ...

  9. 深入浅出Node.js (8) - 构建Web应用

    8.1 基础功能 8.1.1 请求方法 8.1.2 路径解析 8.1.3 查询字符串 8.1.4 Cookie 8.1.5 Session 8.1.6 缓存 8.1.7 Basic认证 8.2 数据上 ...

  10. Java Access Levels(访问控制)

    Access Levels Modifier Class Package Subclass World public Y Y Y Y protected Y Y Y N no modifier Y Y ...