我在尝试执行map.find(10,20)时遇到此错误,anyonw知道如何做到这一点
Error (active) E0304 no instance of overloaded function "std::map<_Kty,
_Ty, _Pr, _Alloc>::find [with _Kty=std::pair<int, int>, _Ty=std::tuple<int, int, int>, _Pr=std::less<std::pair<int, int>>,
_Alloc=std::allocator<std::pair<const std::pair<int, int>, std::tuple<int, int, int>>>]" matches the argument list Maps
#include <iostream>
#include <map>
#include <string>
int main()
{
std::map<std::pair<int, int>,std::tuple<int,int,int>> myMap;
// Inserting data in std::map
myMap[std::make_pair(10, 20)] = std::make_tuple(1,2,3);
auto it = myMap.cbegin();
for (auto const& it : myMap){
std::cout << it.first.first << it.first.second << std::get<0>(it.second);
}
auto search = myMap.find(10,20);
return 0;
}
答案 0 :(得分:1)
您需要一个std::pair
作为密钥,而不是两个int
。插入项目时,您正确使用了std::make_pair
。您需要对find
成员函数执行相同的操作,或者如注释中所述,将密钥括在大括号中。两者都做同样的事情。第一种是更明确的,在第二种情况下,则依赖于隐式转换为std::pair
。
auto search = myMap.find(std::make_pair(10, 20));
或
auto search = myMap.find({10, 20});