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

请注意,此处的适当函数 isoperator[]和 not insertstd::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

对于a 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 回答