如果" key"那么map :: find()会返回什么样的值?确实存在吗?

时间:2014-04-17 18:41:50

标签: c++ map iterator find key

我们假设我的代码中有一张地图:

map <string, set<string> > myMap;

...我想从地图中获取一个元素:

myMap.find("key");

我的问题是:如果&#34;键&#34; myMap会返回什么样的值?不存在? `

/// EDIT 任何人都可以指出错误的原因吗?编译器没有看到任何错误,但服务器测试整个算法,由于这个功能,它不接受它。

    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{
        ..........
    }

4 个答案:

答案 0 :(得分:2)

它返回一个等于myMap.end()的迭代器。您可以轻松地测试:

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

答案 1 :(得分:2)

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

find返回一个迭代器,所以如果该键不存在,则返回一个结束迭代器。

例如:

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

答案 2 :(得分:0)

如果key不存在,

std::map::find会返回等于map.end()的迭代器(或const_iterator)。

  

返回值

     

使用等效于键的键的元素的迭代器。如果不   找到这样的元素,返回末尾(参见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
}

答案 3 :(得分:0)

指向集合末尾的迭代器。对于所有stl容器都是如此。使用

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