2

ペアで作業するのはこれが初めてで、完全に混乱しています。マップに挿入するようにペアを初期化する方法は?
これには標準ライブラリを含める必要がありますか?

#include <string>
#include <map>
using namespace std;
class Roads
{  
 public:  
  map< pair<string,string>, int > Road_map; 
  void AddRoad( string s, string d )
       { int b = 2 ; Road_map.insert( pair<s,d>, b) ; }  //pair<s,d> is wrong here.

 };  
4

3 に答える 3

4

使用できますstd::make_pair

Road_map[make_pair(s, d)] = b;

std::pairまたは、次のように構築することもできます。

Road_map[pair<string,string>(s,d)] = b;

このstd::make_pairアプローチにより、sとの型に名前を付ける必要がなくなりますd

ここでの適切な関数は でoperator[]あり、 ではないことに注意してくださいinsert。挿入するキーと値を含むstd::map::insert単一の引数を取ります。std::pair次のようにする必要があります。

Road_map.insert(pair<const pair<string,string>, int>(make_pair(s, d), b);

これを少しきれいにすることができますtypedef

typedef map<pair<string,string>, int> map_type;
Road_map.insert(map_type::value_type(map_type::key_type(s, d), b));
于 2012-12-29T19:02:13.673 に答える
3

std::make_pair代わりに使用してください。そのようです:

#include <string>
using namespace std;
class Roads
{  
 public:  
    map< pair<string,string>, int > Road_map; 
    void AddRoad( string s, string d )
    { 
        int b = 2 ; 
        Road_map[make_pair(s,d)] = b; 
    }

 }; 
于 2012-12-29T19:00:09.650 に答える
1

の場合map<K, T>value_typeは実際にはpair<K const, T>です。ただし、これにアクセスする最も簡単な方法は、typedef を使用することです。

typedef std::pair<std::string, std::string> string_pair;
typedef std::map<string_pair, int>             map_type;

// ...

Road_map.insert(map_type::value_type(map_type::key_type(s, d), b));

C++11 では、より簡単なemplaceインターフェイスを使用できます。

Road_map.emplace(map_type::key_type(s, d), b);
于 2012-12-29T19:01:36.997 に答える