最近工作中需要使用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](http://blog.csdn.net/wangshubo1989/article/details/49622871 "初始化列表")》,是不是可以使用初始化列表對map進行賦值呢,答案是肯定的。
~~~
std::map<int, string> int_to_string = {
{1, "what"},
{2, "a"},
{3, "fuck"},
{4, "day"},
....
};
~~~
- 前言
- deprecated關鍵字
- 指針(內存泄露)
- 頭文件相互包含(Compiler error C2653: not a class or namespace name)
- 獲取一張圖片的width和height
- This function or variable may be unsafe.
- 智能指針陷阱
- string中的c_str()陷阱
- wstring與string的轉換
- windows下chrome瀏覽器插件不能安裝
- 重定義關鍵字
- 正確釋放vector的內存
- 獲取設備環境HDC
- 抽象類不能實例化對象(但是你明明定義的不是抽象類)
- 重載賦值運算符的自我賦值
- 程序中的變量未初始化
- 成對使用new和delete時要采取相同的形式
- 意想不到的除數為零
- map的初始化(插入數據)
- 正則表達式截取字符串
- 捕獲窗口之外的鼠標消息(鉤子還是??)
- 類中的靜態成員變量(static or const static)
- 有if就要有else(一定成對)
- map查找結果處理
- 使用using namespace std的壞習慣
- new一個指針數組、以及創建動態二維數組
- 使用太多的全局變量
- 沒有及時break出for循環
- vector使用erase后迭代器變成野指針
- C++函數的默認參數(重新定義默認參數)
- 0xC0000005: 讀取位置 xxx時發生訪問沖突
- std::string初始化、最快速判斷字符串為空
- 你開發的軟件安裝在C盤Program Files (x86)下產生的異常