map 用法详解

和vector一样,map也可以看作一种特殊的数组,vector是不限定长度的数组,map是可以不开中间位置元素空间的数组。

map常见的函数:

m.insert(pair)  //插入一对数据
m.size()        //返回容器中元素的个数
m.count(key)    //返回key键是否出现过
m.find(key)     //寻找key键元素,返回到迭代器
m.erase(pos)    //删除迭代器指向位置的元素
m.empty()       //判断是否为空
m.clear()       //清空容器

新建容器对象:
新建一个容器对象和迭代器:
map <类型1,类型2> 容器名称;
map <类型1,类型2> ::iterator 迭代器名称;

map元素有两个部分,前面的叫做键,后面的叫做值。
以键值对< a , b >为例:
添加元素的三种方式:
m.insert(pair<int,int>(a,b));
m.insert(map<int,int>::value_type(a,b));
m[a]=b;

和vector一样,访问元素尽量使用迭代器:
可以用for循环遍历容器,或者用find函数查找相应键的值:
it=find(a); 迭代器指向键a所对应的元素
it->first 指向迭代器所指向元素的键
it->second 指向迭代器所指向元素的值
也可以用最值接的方法:
m[a];来求出键a对应的值

下面来个样例:

#include"stdio.h"
#include"iostream"
#include"map"

using namespace std;

int main()
{
//初始化
    map <int,int> mp;
    map <int,int> ::iterator it;
//三种插入方式
    mp.insert(pair<int,int>(3,8));
    mp.insert(pair<int,int>(11,21));
    mp.insert(pair<int,int>(12,22));
    mp.insert(pair<int,int>(13,23));
    mp.insert(pair<int,int>(14,24));
    mp.insert(pair<int,int>(15,25));
    mp.insert(map<int,int>::value_type(4,9));
    mp[5]=10;
//判断键位5是否出现过
    printf("%d\n",mp.count(5));
    printf("容器的元素分别为:\n");
//遍历取值方式
    for(it=mp.begin(); it!=mp.end(); it++)
    {
        printf("%d %d\n",it->first,it->second);
    }
//通过函数查值
    printf("寻找下标为3的元素:");
    int f=3;
    it=mp.find(f);
    //找不到迭代器会返回end指针
    if(it==mp.end())    printf("NO\n");
    else printf("%d %d\n",it->first,it->second);
//直接用下标查值
    printf("直接下标查找的结果:");
    printf("%d\n",mp[3]);
//删除区间值
    int minn=5;
    int maxn=13;
    printf("删除键为%d到%d的所有元素\n\n",minn,maxn);
    map <int,int> ::iterator itfrom=mp.lower_bound(minn);
    map <int,int> ::iterator itto=mp.upper_bound(maxn);
    if(itfrom!=mp.end())
        printf("第一个被删的是:\n%d %d\n",itfrom->first,itfrom->second);
    if(itto!=mp.end())
        printf("最后一个被删的后一个数是:\n%d %d\n",itto->first,itto->second);
    mp.erase(itfrom,itto);
    printf("删除后的容器:\n");
    for(it=mp.begin(); it!=mp.end(); it++)
    {
        printf("%d %d\n",it->first,it->second);
    }
}

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值