在地图上使用find <pair,int =“”> </pair,>

时间:2012-06-28 14:14:22

标签: c++ dictionary

如果您将地图定义为

,如何使用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..

4 个答案:

答案 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"));