《實用C 》第50課 C 容器之對映map

2021-09-03 07:18:04 字數 1540 閱讀 4820

1、什麼是 map,他跟 vector 和 list 有什麼區別?什麼情況下使用 map?

map提供的是一種鍵值對的容器,裡面的資料元素都是成對出現的,即:key-value,在知道 key 的情況下能迅速的找到 value,他們是一一對應的關係。

如下圖:第乙個值稱之為關鍵字(key),每個關鍵字只能在map中出現一次,是唯一的;第二個稱之為該關鍵字的對應值:

例如:學校中的學生,用學生的什麼資訊作為 key 呢?可以用學號,在校的學生學號不可能重複,所以可以用學號作為key,學生的姓名或者學生資訊作為value,value可以重複,可以相同,畢竟有重名的情況發生。

2、map 的使用場景:

優點查詢起來很快:根據 key 值快速查詢記錄,查詢的複雜度基本是 log(n),如果有1000個記錄,最多查詢10次,1,000,000個記錄,最多查詢20次。怎麼樣快吧?所以,當大家以後的工程中有比較多的使用想快速查詢的話可以使用map。

3、map的標頭檔案和命名空間:

#include //注意,沒有 .h

using namespace std; //在 std 標準命名空間中

4、map的定義:

一般情況下,都是定義乙個空的 map 物件,例如:

mapstud_***_map;

定義完了之後再使用,map也是個模板類,所以他也是支援各種型別的。

5、map的使用:

定義完了之後我們就可以開始使用了,例如:

int main(int argc, char* argv)

*** = stud_***_map[10012];

return 0;}

6、map的刪除:

刪除的話首當其衝的肯定是erase方法了。erase 方法支援 key 刪除和迭代器刪除,例如:

stud_***_map.erase(10010);

stud_***_map.erase(stud_***_map.begin());

7、map的遍歷:

因為是 map 不是陣列,所以不能用下標來遍歷,只能用迭代器來遍歷,如下:

for (map::iterator itor = stud_***_map.begin(); itor != stud_***_map.end(); ++itor)

8、小作業:

定義乙個 map型別的物件:

依次存入以下內容:

10010->'m'

10011->'f'

10012->'f'

10013->'m'

10014->'f'

10015->'m'

之後,使用 for 迴圈刪除map中的value值為 'f' 的元素,並將結果輸出出來!

c 第14課 list容器

list介紹 1 list是乙個雙向鍊錶容器,可高效地進行插入刪除元素。2 list不可以隨機訪問元素,所以不支援at.pos 函式與操作符。it ok it 5 err 3 include list物件的預設構造 list採用採用模板類實現,物件的預設構造形式 list lstt 如 list l...

《實用C 》第24課 結構體型別

1 自定義資料型別 c c 語言本身提供了很多基本資料型別,例如 int float char 等供我們使用。但是程式編寫的過程中問題往往比較複雜,基本的資料型別有時候不能滿足我們的需求,所以c c 語言允許開發者根據自己的需要自定義資料型別,接下來要講解的結構體struct 聯合體union 列舉...

《實用C 》第44課 檔案IO操作之讀寫

1 簡介 上節課給大家介紹了各種型別的檔案流物件,對檔案進行了開啟與關閉的操作。那麼開啟與關閉不是目的,開啟檔案之後重要的是為了要進行檔案的讀寫操作,不然開啟 關閉檔案幹嘛?對不對?在c 檔案流操作中,可以使用多種方法對檔案進行讀寫操作,例如 put get getline read write 都...