7

const_iteratorマップが次のように定義されている場合、findをどのように使用しますか

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

4 に答える 4

9

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));
于 2012-06-28T14:17:36.423 に答える
4

検索はマップのキータイプを取得するため、この場合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";
   }
}
于 2012-06-28T14:18:15.937 に答える
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";
   }
}
于 2014-01-21T12:50:29.360 に答える
0

あなたが使うことができると思う

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"));
于 2019-04-24T14:19:38.023 に答える