如果您将地图定义为
,如何使用const_iterator
查找
typedef std::pair<int, int> MyPair;
map<MyPair, int> MyMap;
将pair
定义为键。
如果只是map<int, int>
,我知道如何使用const_iterator
之类的
typedef map<int, int> MyMap;
MyMap::const_iterator it =
MyMap.find(0);
// etc..
答案 0 :(得分:5)
如果您不使用C ++ 11 ,最方便的是为地图类型执行typedef
:
typedef std::map<MyPair, int> map_type;
然后
map_type::const_iterator it = MyMap.find(make_pair(0, 0));
(我还更改了传递给find
的参数,因为裸int
与您的地图不兼容。)
如果您使用的是C ++ 11 ,您也可以执行
auto it = MyMap.find(make_pair(0, 0));
答案 1 :(得分:3)
Find采用地图的关键类型,因此在这种情况下,您需要创建要在查找中使用的std::pair
。这是一个简短的例子:
#include <map>
#include <string>
#include <iostream>
using namespace std;
int main()
{
std::map<std::pair<int, int>, std::string> m;
m.insert(make_pair(make_pair(0, 0), "Hello"));
m.insert(make_pair(make_pair(1, 0), "There"));
auto res = m.find(make_pair(0,0));
if(res != m.end())
{
cout << res->second << "\n";
}
}
答案 2 :(得分:0)
上面的代码中有编译问题。请找到正确的一个,如下所示:
#include <map>
#include <string>
#include <iostream>
using namespace std;
int main()
{
std::map<std::pair<int, int>, std::string> m;
std::map<std::pair<int, int>, std::string>::iterator res;
m.insert(std::make_pair(make_pair(0, 0), "Hello"));
m.insert(std::make_pair(make_pair(1, 0), "There"));
res = m.find(make_pair(0,0));
if(res != m.end())
{
cout << res->second << "\n";
}
}
答案 3 :(得分:-1)
认为您可以使用
std::map<std::pair<int, int>, std::string> m = {
{{ 0, 0 }, "Hello" },
{{ 1, 0 }, "There" },
};
代替
m.insert(std::make_pair(make_pair(0, 0), "Hello"));
m.insert(std::make_pair(make_pair(1, 0), "There"));