使用在地图上查找<对,int>

Using find on map<pair, int>

本文关键字:int gt lt 地图 查找      更新时间:2023-10-16
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..

如果不使用 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));

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";
   }
}

上面的代码中存在编译问题。请找到正确的,如下所示:

#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";
   }
}
认为

你可以使用

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