簡體   English   中英

C ++ std :: map在找不到鍵時添加值

[英]C++ std::map adds values when key not found

我對C ++的收集不是很好,所以如果我的問題有點愚蠢,請對我輕松一點。

我目前有2張地圖

map<int, Segment*> varSeg;
map<Segment*, bool> rules;

因此varSeg充滿了var-> Segment *對象的分配,並且基於某種邏輯,我試圖使用類似以下循環的內容來填充規則映射。

for(...looping on some vars){
    int segVar = getVar();
    rules[varSeg[segVar]] = (segVar > 0);
}

但是,如果某segVar是不是已經包含在varSeg我遇到了一個怪異的行為。 varSeg映射中創建了一個新條目, varSeg包含鍵segVar和Segment的值為Null 當然哪一個會在以后的代碼中引起各種各樣的問題。

我的問題是為什么會這樣? 這里的varSeg[segVar]語句不是讀語句嗎? 這很難調試,因為我在代碼中找不到位置,正在向地圖寫入空值。 那你能解釋我在這里做錯了什么嗎?

我的問題是為什么會這樣?

正如文檔中明確指出的那樣,這就是std::map::operator[]應該做的。

如果您不希望這種行為(最有用),請使用find成員函數代替[]

無論如何,即使[]沒有創建新元素(或者您使用find ),您的代碼也會失敗,因為您根本無法處理在segVar中找不到varSeg

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM