2014-04-17 146 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

相关问题