map的下標訪問

2021-10-13 12:42:10 字數 876 閱讀 3869

先簡單介紹一下map,c++中的map屬於stl的範疇,通過key-value的方式儲存。

插入map有兩種方式

一種是呼叫insert方法:

mapm1;

m1.insert(pair(1, 20));

第二種方式可以通過類似陣列賦值的方式

m1[1] = 20;

元素的訪問方式也有兩種方式:

一種是通過迭代的方式:

mapm;

map::iterator iter;

m[1] = 20; m[2] = 21;

iter = m.find(1);

if(iter != m.end())

第二種方式是通過陣列發方式(下標)訪問value

mapm;

int value = m[1];

但是map的下標訪問和迭代的方式訪問有什麼不一樣的地方呢。

從**上看使用陣列比較方便,但是陣列訪問有乙個非常不好的事情,比如當map中不存在某乙個key值時,通過陣列的方式訪問,它會將整個key值插入到map中,並且插入的value是乙個預設值。在做乙個專案的時候需要在適當的時候刪除一些元素,我們**是多執行緒的,在刪除之後又通過key去查詢當前的值在不在就導致此key再次出現在map中,導致map越來越大,到後面如果有需要進行全面遍歷的時候,這個時候就會非常的耗時而且是沒有沒有用的。

由於下標運算子可能插入乙個新元素,我們只能對非const的map使用下標操作符。如果只希望訪問map的元素,不希望因為訪問的關鍵字不存在而建立乙個新的元素,可以使用c.at(key),如果不存在關鍵字key會丟擲異常,如果存在key則訪問其對應的值。

map下標操作

強烈推薦人工智慧學習 之前提到過有關map下標操作,但是今天這個更複雜一點了,寫下來學習一下。struct node int main map iterator it it maptest.find 2 find函式返回乙個迭代器 if maptest.end maptest.find 1 cout...

map記錄下標

小雲正在參與開發乙個即時聊天工具,他負責其中的會話列表部分。會話列表為顯示為乙個從上到下的多行控制項,其中每一行表示乙個會話,每乙個會話都可以以乙個唯一正整數id表示。當使用者在乙個會話中傳送或接收資訊時,如果該會話已經在會話列表中,則會從原來的位置移到列表的最上方 如果沒有在會話列表中,則在會話列...

下標訪問原理

陣列的名字 一般情況下代表首元素的位址 當陣列名與 結合的時候得到的是整個陣列的位址 只要取位址取的就是首元素位址 首元素第乙個位元組肯定與陣列第乙個位元組相同 arr 5 0x1 0x20 arr取得是第乙個元素,即為1,1有4個位元組,取首元素位址。arr取的是陣列的第乙個位元組 也為0x1 雖...