C++基礎:C++標準庫之map簡介

來源:互聯網
上載者:User

1、綜述

        Map是C++STL中眾多的Container(容器)之一,與python的字典略類似,Map作為一個關聯容器,將key與value相互關聯,其中key為關鍵字,是不可更改的,而value是key值的相對應值。Map所提供的一對一的資料對應關係,在很多時候可以提供編程的極大便利。

        Map內部通過自建紅/黑樹狀結構(一種非嚴格意義上的平衡二叉樹)實現,可以對資料自動排序,因而在map內部的所有資料是有序存放的。Map具有的一大特點是增加和刪除節點對迭代器的影響很小,除了那個動作節點,對其他的節點都沒有什麼影響。

Map具有如下的功能特點: 自動建立Key - value的對應。key 和 value可以是任意你需要的類型。 根據key值快速尋找記錄,尋找的複雜度基本是Log(N),如果有1000個記錄,最多尋找10次,1,000,000個記錄,最多尋找20次。 快速插入Key - Value 記錄。 快速刪除記錄 根據Key 修改value記錄。 遍曆所有記錄。

2、map的常見操作

首先,在使用map之前需包含標頭檔#include<map>,下面簡要介紹map的常見操作,詳細資料可參見http://www.cplusplus.com/reference/map/map/。

(1)建構函式:

map<int,string> Mymap; map<int,string> Mymap2 (Mymap.begin(),Mymap.end());map<int,string> Mymap3 (Mymap2); 
樣本中int是key的類型,string是value的類型,可以為其他類型,如map<char,float> Mymap4; 


(2)插入資料:有幾種方式,下面舉三類例子。

Mymap[1] = "one"; //方式1Mymap.insert(map<int,string>::value_type(11,"oneone"));//方式2Mymap.insert(pair<int ,string>(111,"oneoneone"));//方式3
其中方式1簡單直觀,然而卻並不值得提倡,因其效能並不好。在插入key = 1的value=“one”時,需要首先在Mymap,尋找主鍵1是否已經存在,若不存在, 則將一個新的對象插入Mymap,其key為1,但value是一個Null 字元串,插入完成後,將value賦為"one"; 該方法會首先將每個值都賦為預設值,然後再賦為顯示的值,如果元素是類對象,則開銷比較大。而另外的方法則有效避免了這一問題。

(3)尋找元素:

利用find()方法,find()函數返回一個迭代器指向索引值為key的元素,如果沒找到就返回指向map尾部的迭代器。

map<int ,string>::iterator itr;itr = Mymap.find(1);if(itr!=Mymap.end())//如找不到,返回Mymap.end(){cout<<"找到key為1的項:"<<endl;cout<< itr->first <<" "<<itr->second<<endl;//可以列印該項的key和value}elsecout<<"找不到key為1的項。"<<endl;

(4)刪除元素:

採用erase()方法實現:

itr = Mymap.find(1);if(itr!=Mymap.end()){Mymap.erase(itr);//通過迭代器對象刪除//Mymap.erase(1);//也可以通過主鍵刪除}

erase()也可以刪除一個範圍如:
Mymap.erase(Mymap.begin(),Mymap.end());//相當於Mymap.clear(),可以清除整個map的內容

(5)swap()方法:

要注意的是,在map中swap()方法進行的是對於兩個map的交換,而非對map內兩個元素的交換。形如:

Mymap.swap(Mymap2);//交換兩個map

(6)size()方法:

返回map的大小,即元素的個數。

(7)empty()方法

判斷map是否為空白,若map為空白,則返回true。

(8)begin()方法:

返回指向map頭部的迭代器

(9)end()方法:

返回指向map尾部的迭代器

(10)count() 方法:

 返回指定元素出現的次數


3、常見操作程式執行個體

貼上一個簡單的程式集運行結果,以便於更好的理解。

//測試map用法#include<map>#include<string>#include<iostream>using namespace std;void test_map(){map<int ,string > Mymap;//key為int型,value為string型map<int ,string > Mymap2;pair<int ,string> Mypair;Mypair.first = 1;Mypair.second = "one";Mymap.insert(Mypair);//添加資料方式1Mymap.insert(map<int,string>::value_type(11,"oneone"));//添加資料方式二Mymap2[2] = "two"; //添加資料方法三,效率較差,不提倡Mymap2[22] = "twotwo";Mymap2.insert(pair<int ,string>(222,"twotwotwo"));map<int ,string>::iterator itr;//迭代器cout<<"Mymap中的內容為:"<<endl;for(itr = Mymap.begin();itr!=Mymap.end();itr++)//元素遍曆{cout<< itr->first <<" " << itr->second<<endl;}cout<<"Mymap2中的內容為:"<<endl;for(itr = Mymap2.begin();itr!=Mymap2.end();itr++){cout<< itr->first <<" " << itr->second<<endl;}/////元素尋找itr = Mymap.find(11);//尋找map中某key對應的元素是否存在if(itr!=Mymap.end())//如找不到,返回Mymap.end(){cout<<"\n找到key為11的項:"<<endl;cout<< itr->first <<" "<<itr->second<<endl;itr->second = "oneoneone";cout<<"該項value修改為:"<<Mymap[11]<<endl;}Mymap.swap(Mymap2);//注意:交換的是兩個mapcout<<"\n執行交換後:"<<endl;cout<<"Mymap中的內容為:"<<endl;for(itr = Mymap.begin();itr!=Mymap.end();itr++){cout<< itr->first <<" " << itr->second<<endl;}cout<<"Mymap2中的內容為:"<<endl;for(itr = Mymap2.begin();itr!=Mymap2.end();itr++){cout<< itr->first <<" " << itr->second<<endl;}cout<<"\n刪除Mymap2中key為1的項"<<endl;itr = Mymap2.find(1);if(itr!=Mymap2.end()){Mymap2.erase(itr);////Mymap2.erase(1);//按key刪除,以上面的操作效果等效}cout<<"刪除後Mymap2中的內容為:"<<endl;for(itr = Mymap2.begin();itr!=Mymap2.end();itr++){cout<< itr->first <<" " << itr->second<<endl;}if(!Mymap.empty()){cout<<"\nMymap大小為:"<<Mymap.size()<<endl;Mymap.clear();//Mymap.erase(Mymap.begin(),Mymap.end());//與clear()等效cout<<"clear()之後Mymap大小為:"<<Mymap.size()<<endl;}}



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.