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\n",mp['c']);
    for(map<char,int>::iterator it=mp.begin();it!=mp.end();it++)
    {
        printf("%c %d\n",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\n",mp['c']);//30
    
    mp.erase('b');//刪除鍵為b的映射,也就是b 10
    for(map<char,int>::iterator it=mp.begin();it!=mp.end();it++)
    {
        printf("%c %d\n",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\n",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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM