这是我第一次与双人合作,完全糊涂了。 如何初始化一对以将其插入地图? 我应该为此包含一些标准库吗?
#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.
};
答案 0 :(得分: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));
答案 1 :(得分: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;
}
};
答案 2 :(得分: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);