我想在map中找到pair,然后打印出来。这是我的代码:
std::map<std::string, std::string> mLoginPasswordMap{ "test", "test2" };
std::string key1("test");
std::string value1("test2");
auto it = std::find_if( mLoginPasswordMap.cbegin(),
mLoginPasswordMap.cend(),
[&key1, &value1]( const auto& elem )
{
return ( key1 == elem.first && value1 == elem.second );
});
if( it != mLoginPasswordMap.cend() )
{
std::cout << it->first << endl;
std::cout << it->second << endl;
}
if( it == mLoginPasswordMap.cend() )
{
std::cout << "No pair in map" << endl;
}
和我收到这种错误时,程序正在编译:
usr/include/c++/9/bits/stl_map.h:273:4: required from ‘std::map<_Key, _Tp, _Compare, _Alloc>::map(_InputIterator, _InputIterator) [with _InputIterator = const char*; _Key = std::__cxx11::basic_string<char>; _Tp = std::__cxx11::basic_string<char>; _Compare = std::less<std::__cxx11::basic_string<char> >; _Alloc = std::allocator<std::pair<const std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char> > >]’
main.cpp:23:79: required from here
/usr/include/c++/9/ext/new_allocator.h:146:4: error: no matching function for call to ‘std::pair<const std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char> >::pair(const char&)’
146 | { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我不知道我做错了什么。有人能帮我吗?
只需以简单的方式填充地图,而不是:
std::map<std::string, std::string> mLoginPasswordMap;
mLoginPasswordMap["test"] = "test2";
那么你的代码就可以工作了。
也就是说,这不是使用map
的方式。如果您确实需要搜索(并不适用于映射),更好的方法是:
std::map<std::string, std::string> mLoginPasswordMap;
mLoginPasswordMap["test"] = "test2";
std::string key1("test");
std::string value1("test2");
std::map<std::string, std::string>::iterator it;
for(it = mLoginPasswordMap.lower_bound(key1); it != mLoginPasswordMap.upper_bound(key1); it++)
{
if (it->second == value1)
{
break;
}
}
if( it != mLoginPasswordMap.cend() && it->second == value1)
{
std::cout << it->first << endl;
std::cout << it->second << endl;
}
else
{
std::cout << "No pair in map" << endl;
}
这样,您实际上利用map
而不遍历它。upper_bound
和lower_bound
是搜索范围的常用方法。
现在,如果你有一个map
,想要搜索一个给定的键:
std::map<std::string, std::string> mLoginPasswordMap;
mLoginPasswordMap["test"] = "test2";
std::string key1("test");
std::string value1("test2");
auto it = mLoginPasswordMap.find(key);
if(it != mLoginPasswordMap.end())
{
std::cout << it->first << endl;
std::cout << it->second << endl;
}
else
{
std::cout << "No pair in map" << endl;
}