我找了一些代碼,看起來像這樣迭代器上的C++映射?
map<string, int>::iterator itr = mValue.find(inName);
他們爲什麼要定義一個迭代器。是不是可以這樣說
int value = mValue.find(inName)
謝謝。
我找了一些代碼,看起來像這樣迭代器上的C++映射?
map<string, int>::iterator itr = mValue.find(inName);
他們爲什麼要定義一個迭代器。是不是可以這樣說
int value = mValue.find(inName)
謝謝。
int value = mValue.find(inName)->second;
提供發現沒有返回mValue.end()
如果該鍵不存在於地圖存在,會發生什麼?你會爲find
返回什麼?使用迭代器,您可以返回mValue.end()
。另外,迭代器允許迭代 - int不能。
mValue.find(inName)
將迭代器返回到地圖中位置爲inName
的位置。如果您只需要相應的值,則可以使用mValue[inName]
。
這是非常量,但會創建一個映射條目,如果它不存在。 (並不是說原始代碼在沒有價值的情況下沒有那麼慘重)。 – 2011-04-06 19:03:49
您可以通過取消引用迭代器來獲取值(就像它是一個指針一樣)。這將返回一個密鑰/值對的類型,其具有的值是一個構件second
:
map<string, int>::iterator itr = mValue.find(inName);
int value = itr->second;
返回一個迭代器的原因是因爲當一個匹配找不到則返回end()
迭代:
map<string, int>::iterator itr = mValue.find(inName);
if (itr == mValue.end())
{
throw "No value could be found.";
}
int value = itr->second;
希望這是有道理的。
+1對解引用迭代器的明確說明 – 2013-08-02 23:21:29
原因:
因爲find會在映射中返回找到該鍵的位置。如果沒有找到,它會返回NULL,因此檢查
編輯:更新答案,但不刪除原始內容,讓其他人知道什麼是錯的,以及爲什麼這個答案是downvoted。
更新答:
因爲發現返回對在關鍵是找到地圖的位置。如果找不到,則返回map.end()。
未找到時不會重新生成NULL。所以-1錯誤的答案。 – Sjoerd 2011-04-06 19:05:03
借調在最初downvote後不刪除答案。 – phooji 2011-04-06 19:44:36
@ phooji:每個人都不可能一直上網。如果您覺得自己想要退縮只是因爲該人沒有刪除答案,您可以自由選擇。 – mukeshkumar 2011-04-07 09:11:29
你可能想使用
map<string, int>::iterator itr = mValue.find(inName);
int value = mValue[inName];
mValue[inName] = 1234;
照顧,也不會一個const地圖上工作(因爲它將無法插入條目)
他們爲什麼定義一個迭代器。
,因爲這是在map .find()函數返回時,包含 鍵和值迭代器。或者,如果找不到該值,則返回mValue.end(),因爲您可以測試該值是否在地圖中找到,所以它很有用。
,讓你可以做的值:
map<string, int>::iterator itr = mValue.find(inName);
if(itr != map.end()) {
int value = itr->second;
// use value
}
是沒可能說類似int值= mValue.find(inName)
不,的std ::地圖沒有這樣的功能。 (如果是這樣,它將不得不拋出一個例外,如果沒有找到該值)
它確實有這樣一個函數('operator []'),但是如果它還不存在的話(它不得不拋出異常),它會在映射中插入鍵的附加副作用。 – dfan 2011-04-06 19:56:02
也許upvote一些答案 – 2011-04-06 19:03:07