2011-10-22 86 views
2

在我的功能的關鍵,我有這個參數:看看是否有在地圖C++

map<string,int> *&itemList 

我想首先檢查是否有鍵存在。如果該鍵存在,則獲取該值。 我想這:

map<string,int>::const_iterator it = itemList->find(buf.c_str()); 
if(it!=itemList->end()) 
    //how can I get the value corresponding to the key? 

是檢查按鍵是否存在正確的方法是什麼?

+1

的可能重複:http://stackoverflow.com/questions/535317/checking-value-exist-in-a-stdmap-c – FailedDev

+0

@FailedDev我所提出的重複不同意 - 這個問題是問搜索*值*但這個問題是關於搜索*鍵*(然後使用相應的值,但他們是非常不同的問題) – Flexo

回答

5

是的,這是做到這一點的正確方法。與密鑰相關聯的值存儲在std::map迭代器的second成員中。

map<string,int>::const_iterator it = itemList->find(buf.c_str()); 
if(it!=itemList->end()) 
{ 
    return it->second; // do something with value corresponding to the key 
} 
0

無需遍歷所有項目,只需使用指定鍵訪問該項目即可。

if (itemList->find(key) != itemList->end()) 
{ 
    //key is present 
    return *itemList[key]; //return value 
} 
else 
{ 
    //key not present 
} 

編輯:

以前的版本中查找地圖的兩倍。更好的解決方案是:

map::iterator<T> it = itemList->find(key); 
if (it != itemList->end()) 
{ 
    //key is present 
    return *it; //return value 
} 
else 
{ 
    //key not present 
} 
+1

無需查找項目兩次,無論是。 'find()'返回一個迭代器直接訪問它。 –

+1

不要這樣做。你現在正在搜索樹兩次。該值在find(key) - > second中可用(假設它不是結束的)。 –

+0

我知道這只是爲了可讀性,並顯示[]運算符的用法。將編輯我的答案。 –