2014-04-17 144 views
0

假設我有我的代碼映射:如果「key」不存在,map :: find()會返回什麼樣的值?

map <string, set<string> > myMap; 

...我想從圖中的元素:

myMap.find("key"); 

我的問題是:什麼樣的價值將MYMAP回報如果「鑰匙」不存在? `

///編輯 任何人都可以指出錯誤的原因嗎?編譯器沒有看到任何錯誤,但服務器測試整個算法,不接受它因爲這個功能。

map< string, set<string> >::iterator mapIterator = container.find(key); 

    if(mapIterator != container.end()){ 
     set<string>::iterator setIterator = mapIterator->second.begin(); 
     if(!mapIterator->second.empty()){ 
      while(setIterator != mapIterator->second.end()){ 
       cout << *setIterator << endl; 
       ++setIterator; 
      } 
     }else{ 
      ....... 
     } 
    }else{ 
     .......... 
    } 
+0

我相信它會返回地圖::結束 – ultifinitus

+0

的可能重複(http://stackoverflow.com/questions/10124679/what-happens-if-i-read-a-maps-value-where-key-does-exist) – honk

+0

請參閱http://en.cppreference.com/w/cpp/container/map/find – juanchopanza

回答

2

它返回一個等於myMap.end()的迭代器。您可以輕鬆地爲測試:

auto it = myMap.find("key"); 
if (it == myMap.end()) 
{ 
    std::cout << "key not found\n"; 
} 
0

std::map::find返回迭代器(或常量性)等於map.end()如果key不存在。

返回值

迭代器與主要相當於鍵的元素。如果找不到 這樣的元素,則返回past-the-end(參見end())迭代器。

http://en.cppreference.com/w/cpp/container/map/find

實施例:

std::map<std::string, int> m; 
if(m.find(searchedString) != m.end()) { 
    //... present 
} else { 
    //... not found 
} 
0

指向過去收集的端部的迭代器。所有stl容器都是如此。檢查值與

map <string, set<string> > myMap; 
map <string, set<string> > :: iterator iter = myMap.find("x"); 
if(iter != myMap.end()) 
{ 
    // ... do something 
} 
2

http://en.cppreference.com/w/cpp/container/map/find

查找返回迭代器,所以如果該鍵不存在,則返回end迭代器。

例如:?如果我看地圖的值發生在鍵不存在]

std::map< int, int > some_map; 
if (some_map.find(10) != some_map.end()) 
{ 
    ... key exists ... 
} 
else 
{ 
    ... key does not exist ... 
} 
+0

請不要鏈接到cplusplus.com。它以不準確和缺點而聞名。請使用en.cppreference.com for C++參考 –

+0

當然。改變了,雖然我確實喜歡CPP的組織方式。超出了這個問題的範圍,但我沒有任何問題與該網站。我經常查看構造函數,函數或算法中的項目,到目前爲止,他們已經完成了CPP所說的他們使用CPP所說的參數所做的事情。我想如果它錯過了任何功能,我可能不會意識到他們錯過了。 – qeadz

相關問題