C++ 在映射中插入一对密钥

C++ 在映射中插入一对密钥,c++,stl,insert,C++,Stl,Insert,在地图中插入对的方法是: std::map<char,int> mymap; // first insert function version (single parameter): mymap.insert ( std::pair<char,int>('a',100) ); std::map mymap; //首次插入函数版本(单参数): mymap.insert(std::pair('a',100)); 但现在我尝试在地图中插入: map<pair

在地图中插入对的方法是:

std::map<char,int> mymap;

  // first insert function version (single parameter):
  mymap.insert ( std::pair<char,int>('a',100) );
std::map mymap;
//首次插入函数版本(单参数):
mymap.insert(std::pair('a',100));
但现在我尝试在地图中插入:

map<pair<int,int>, int> map1; //(pair is the key and int is a value)
map1//(pair是键,int是值)
我试过这个:

pair<int,int> p;
p.first = 5;
p.second = 20;

map1.insert(pair<int,int>,double> (p,0));
p对;
p、 第一个=5;
p、 秒=20;
map1.插入(成对,双>(p,0));

那么,我该怎么做呢?

如果您愿意,您可以手动定义和填充
pair
,但是使用
make\u pair
,或者(从C++17开始)pair的演绎指南更为常见和习惯:

map1.insert(std::make_-pair(std::make_-pair(5,20),0));
插入(std::pair{std::pair{5,20},0});//C++17或更高版本

首先,如果您在插入时构造密钥,您可能希望改用
emplace
,因为它将在适当的位置构造密钥和值,并且可以更好地转发传递给它的参数,而无需显式构造。因此,您的第一个示例将简化为

mymap.emplace('a',100);
而你的第二个例子肯定会起作用

map1.emplace(std::pieclewise_构造,std::forward_as_元组(5,20),std::forward_as_元组(0));
从C++17开始,也可以作为

map1.安放(5,20,0);

请参见示例,这方面有很多可能。你可以选择下面任何一个更适合你的

  • 使用make_对
  • map-m;
    m、 插入(使配对(使配对(5,20,0));
    
  • 使用大括号
  • map-m;
    m、 插入({5,20},0});
    
    声明C++对第一
    p对(5,20);
    地图m;
    m、 插入(配对(p,0));
    
    map1.insert({5,20},0})最接近您的代码是“map1.insert(pair>(p,0));”您会遇到什么错误?阅读它们应该始终是第一步。请把它们包括在问题中
    
     map<pair<int,int>, int> m;
     m.insert(make_pair(make_pair(5,20), 0));
    
     map<pair<int,int>, int> m;
     m.insert({{5,20}, 0});
    
     pair<int,int> p(5,20);
     map<pair<int,int>, int> m;
     m.insert(make_pair(p, 0));