在下面的代碼,問關於C + +迭代器`map`
std::map<Key,Int>::iterator p;
p = randomTable[chunk].find(value);
if (p != randomTable[chunk].end()) {
} else {
}
如何進行p != randomTable[chunk].end()
作品?
這是不是意味着,對於不是最後一個(end()
)元素的randomTable中的所有元素?
在下面的代碼,問關於C + +迭代器`map`
std::map<Key,Int>::iterator p;
p = randomTable[chunk].find(value);
if (p != randomTable[chunk].end()) {
} else {
}
如何進行p != randomTable[chunk].end()
作品?
這是不是意味着,對於不是最後一個(end()
)元素的randomTable中的所有元素?
如果值不在地圖中,find(value)將返回與end()相同的值。因此,如果值在地圖中,則會進入「if」分支,如果不是,則會進入「else」分支。
end()實際上並不是地圖的成員 - 它指向「結束後的元素」。這是一個有點奇怪的想法,但它可能有助於認爲搜索查看了地圖中的所有元素,但未能找到您要查找的元素。
號在爲std::map<K, V>::find
的文檔,你可以看到:
返回值
一個迭代的元素,如果指定鍵值被發現,或者地圖::如果結束在容器中找不到指定的密鑰。
因此,該if
聲明只是檢查你實際上發現了什麼。