map类基础使用方法(C++)

#include <iostream>
#include <cstring>
#include <map>

using namespace std;

/**map提供了任何数据类型到任何数据类型的映射,而普通的数组只能提供int型到其他类型的映射
(如数组:char A[10],A[1]=‘c’,则就是int型到char型的映射,数字1映射到字符‘c’)
map的定义:map<typename_key,typename_value) mp; //尖括号内是映射前类型key和映射后类型value>**/

int main()
{
    map<char,int> mp;       //设置一个char映射到int类型的map
    mp['a']=10;
    mp['c']=20;
    mp['b']=30;
    mp['d']=40;
    mp['e']=50;
    mp['f']=60;
    mp['g']=70;
    mp['h']=80;

    //访问(通过数组下标)
    cout<<"mp['a']="<<mp['a']<<endl;
    //访问(通过迭代器)
    for(map<char,int>::iterator it=mp.begin();it!=mp.end();it++)
        cout<<it->first<<":"<<it->second<<endl;
    //注意:map内部会以键值从小到大自动排序(从第二种访问输出结果可以看出)

    //find(key) 查找,函数返回键为key的映射的迭代器(相当于指针)
    map<char,int>::iterator it=mp.find('b');
    cout<<"find---"<<it->first<<":"<<it->second<<endl;

    //erase() 删除元素
    it=mp.find('c');
    mp.erase(it);             //删除单个元素,参数为指向某元素的迭代器
    cout<<"输出:"<<endl;
    for(it=mp.begin();it!=mp.end();it++)
        cout<<it->first<<":"<<it->second<<endl;
    mp.erase('e');            //删除单个元素,参数为欲删除的键key
    cout<<"输出:"<<endl;
    for(it=mp.begin();it!=mp.end();it++)
        cout<<it->first<<":"<<it->second<<endl;
    it=mp.find('g');
    mp.erase(it,mp.end());    //删除区间内所有元素,参数为迭代器,注意区间左闭右开
    cout<<"输出:"<<endl;
    for(it=mp.begin();it!=mp.end();it++)
        cout<<it->first<<":"<<it->second<<endl;

    //size() 获得map中映射对数
    cout<<"size:"<<mp.size()<<endl;

    //clear() 清空map中所有元素
    mp.clear();
    cout<<"size:"<<mp.size()<<endl;  //size=0

    return 0;
}

 

map的常见用途:

1. 需要建立字符/字符串与整数之间映射的题目,使用map可以减少代码量;

2. 判断大整数(整数过大以至于不适合使用int数组)或其他类型数据是否存在的题目,可以把map当做bool数组使用;

3. 字符串与字符串之间的映射也有可能遇到。

另外:

map中键和值是唯一对应的关系,如果想要一个键对应多个值,需要使用mutilmap。除此之外,C++ 11标准中增加了unordered_map,可以不对key进行排序,比map速度要快许多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

音无八重

谢谢老板!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值