C++标准模板库(STL)之Map

1、Map的常用用法

map:映射。可以将任何基本类型,结构体,STL容器映射到任何基本类型包括容器。

使用map,需要加map的头文件,#include<map>和using namespace std;

1.1、map的定义

map<typename1,typename2> mp;
map<string,int> mp;
//如果是字符串到int的映射,必须使用string不能使用char数组。

1.2、map容器元素的访问

map的两种访问方式:下标访问、迭代器访问

1.2.1、下标访问

和访问数组一样。map中键是唯一的

1.2.2、迭代器访问

map<typename1,typename2>::iterator it;

#include<stdio.h>
#include<map>

using namespace std;

int main()
{
    map<char,int> mp;
    mp['a']=5;
    mp['b']=10;
    mp['d']=40;
    mp['c']=20;
    mp['c']=30;//20被覆盖
    printf("%d
",mp['c']);
    for(map<char,int>::iterator it=mp.begin();it!=mp.end();it++)
    {
        printf("%c %d
",it->first,it->second);//it->first:当前映射的键,it->second:当前映射的值
    }
    //a 5  
    //b 10  
    //c 30 
    //d 40
    //map会以键从小到大的顺序自动排序。map内部是使用红黑树实现的,set内部也是。
    //建立映射的时候,会自动实现从小到大的排序功能
    return 0;
}
View Code

1.3、map常用函数

1.3.1、find()

find(key):返回键为key的映射,时间复杂度为O(logN)

1.3.2、erase()

删除单个元素:

mp.erase(it):it为需要删除的元素的迭代器。时间复杂度为O(1)

mp.erase(key):key为删除元素的键,时间复杂度为O(logN)

删除区间内的元素,左闭右开[start,end)

1.3.3、size()
1.3.4、clear()

用来清空map,复杂度为O(N)

#include<stdio.h>
#include<map>

using namespace std;

int main()
{
    map<char,int> mp;
    mp['a']=5;
    mp['b']=10;
    mp['d']=40;
    mp['c']=20;
    mp['c']=30;//20被覆盖
    printf("%d
",mp['c']);//30
    
    mp.erase('b');//删除键为b的映射,也就是b 10
    for(map<char,int>::iterator it=mp.begin();it!=mp.end();it++)
    {
        printf("%c %d
",it->first,it->second);
    }
    //a 5
    //c 30
    //d 40
    map<char,int>::iterator it=mp.find("a");
    mp.erase(it);//删除a 5
    for(map<char,int>::iterator it=mp.begin();it!=mp.end();it++)
    {
        printf("%c %d
",it->first,it->second);
    }
    //c 30
    //d 40
    mp['e']=50;
    mp['f']=60;
    map<char,int>::iterator it=mp.find("d");
    mp.erase(it,mp.end());//删除区间, d 40  e 50
    return 0;
}
View Code

1.4、map的常见用途

a、建立字符或者字符串与整数之间的映射的时候,使用map

b、判断大整数或者其他类型数据是否存在的时候,map可以当bool数组用

c、字符串和字符串的映射

2018-09-25 19:20:09

@author:Foreordination

原文地址:https://www.cnblogs.com/drq1/p/9699482.html