c 的map中的值通過下標訪問為0的問題

2021-09-26 03:36:49 字數 593 閱讀 8168

今天遇到乙個問題,在乙個map巢狀中直接使用下標訪問符去操作value,需求是這樣的,我要通知不同渠道不同型別的當前登入人數。

直接上**

//我定義了乙個資料結構

typedef std::maptype2loginnum;

typedef std::mapchannelmap;

//直接訪問

channelmap g_channelmap;

g_channelmap[x][y]++; //x和y都是變數,此時可能還沒有x這個key對應的值

printf("%d",g_channelmap[x][y]);

最後輸出的結果為1,很顯然,type2loginnum的value中的值被初始化為0了。我們一起跟進原始碼看看

也就是說,哪怕你沒有對map進行插入操作,哪怕只是用判斷了下返回值是否是0,map物件也會自動新增一項。

不過一般判斷map是否包含乙個鍵,是用map的find方法,判斷find的返回結果是否是map的end。

所以當我們有些統計各個型別的人數的數量的時候,比如從乙個鍊錶中根據不同的型別來統計數量的時候可以採用這個特性,能省不少**。

map的下標訪問

先簡單介紹一下map,c 中的map屬於stl的範疇,通過key value的方式儲存。插入map有兩種方式 一種是呼叫insert方法 mapm1 m1.insert pair 1,20 第二種方式可以通過類似陣列賦值的方式。m1 1 20 元素的訪問方式也有兩種方式 一種是通過迭代的方式 map...

c 的map中通過key獲取value的方法

一般是value map key 或者另一種迭代器的方式 1 在map中,由key查詢value時,首先要判斷map中是否包含key。2 如果不檢查,直接返回map key 可能會出現意想不到的行為。如果map包含key,沒有問題,如果map不包含key,使用下標有乙個危險的 會在map中插入乙個k...

如何遍歷Map集合中的值

獲取keyset集合 獲取iterator物件,用於遍歷keyset集合 根據key,獲取map集合的值 map map new hashmap 建立map集合 map.put 1,das 儲存鍵和值 map.put 2,dfg map.put 3,gtd 第一種遍歷map的方式,先遍歷map集合所...