码迷,mamicode.com
首页 > 其他好文 > 详细

map 用法详解

时间:2015-08-06 22:30:49      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:stl

和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);
    }
}

技术分享

版权声明:本文为博主原创文章,未经博主允许不得转载。

map 用法详解

标签:stl

原文地址:http://blog.csdn.net/qq_27508477/article/details/47322739

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!