1. 程式人生 > >沒有躲過的坑--map的初始化(插入資料)

沒有躲過的坑--map的初始化(插入資料)

最近工作中需要使用map,進行查詢。

首先簡單介紹一點map,也許是教科書裡講授最少的STL知識吧。但是在實際工作中map挺重要的,用於查詢很方便快捷,尤其是以鍵和值的形式存在的!

1、標頭檔案

#include<map>

2、map的功能

自動建立Key - value的對應。key 和 value可以是任意你需要的型別。
根據key值快速查詢記錄,查詢的複雜度基本是Log(N),如果有1000個記錄,最多查詢10次,1,000,000個記錄,最多查詢20次。
快速插入Key - Value 記錄。
快速刪除記錄
根據Key 修改value記錄。
遍歷所有記錄。

3、map的建構函式


map共提供了6個建構函式,我們通常用如下方法構造一個map:

Map<int, string> mapStudent;

4、插入資料
(1)my_Map[“a”]=1;

改變map中的條目非常簡單,因為map類已經對[]操作符進行了過載

enumMap[1] = “One”;

enumMap[2] = “Two”;

…..

這樣非常直觀,但存在一個性能的問題。插入2時,先在enumMap中查詢主鍵為2的項,沒發現,然後將一個新的物件插入enumMap,鍵是2,值是一個空字串,插入完成後,將字串賦為”Two”; 該方法會將每個值都賦為預設值,然後再賦為顯示的值,如果元素是類物件,則開銷比較大。我們可以用以下方法來避免開銷:

enumMap.insert(map<int, CString> :: value_type(2, "Two"))
my_Map.insert(map<string,int>::value_type("b",2));
my_Map.insert(pair<string,int>("c",3));
my_Map.insert(make_pair<string,int>("d",4));

起初我就是用上面愚蠢的方法進行了插入資料,但是我的資料量挺大的,需要近一千對,總不能一條一條的這樣寫吧。

於是想起了之前寫的部落格《c++11特性之initializer_list

》,是不是可以使用初始化列表對map進行賦值呢,答案是肯定的。

std::map<int, string> int_to_string = {
{1, "what"},
{2, "a"},
{3, "fuck"},
{4, "day"},
....
};