[英]Why accessing map values by using at in C++ is so slow when key values are std vectors?
[英]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.