2011-06-20 53 views
1

在下面的代碼,問關於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中的所有元素?

回答

5

如果值不在地圖中,find(value)將返回與end()相同的值。因此,如果值在地圖中,則會進入「if」分支,如果不是,則會進入「else」分支。

end()實際上並不是地圖的成員 - 它指向「結束後的元素」。這是一個有點奇怪的想法,但它可能有助於認爲搜索查看了地圖中的所有元素,但未能找到您要查找的元素。

3

號在爲std::map<K, V>::find的文檔,你可以看到:

返回值

一個迭代的元素,如果指定鍵值被發現,或者地圖::如果結束在容器中找不到指定的密鑰。

因此,該if聲明只是檢查你實際上發現了什麼。