在地图中插入配对密钥

时间:2019-12-12 11:43:50

标签: c++ stl insert

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

std::map<char,int> mymap;

  // first insert function version (single parameter):
  mymap.insert ( std::pair<char,int>('a',100) );

但是现在我试图将其插入地图中

map<pair<int,int>, int> map1; //(pair is the key and int is a value)

我尝试过:

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

map1.insert(pair<int,int>,double> (p,0));

那我该怎么办?

3 个答案:

答案 0 :(得分:0)

您可以根据需要手动定义和填充pair,但是使用make_pair或(自C ++ 17起)pair的推导指南更为常见和惯用:

map1.insert(std::make_pair(std::make_pair(5,20),0));

map1.insert(std::pair{std::pair{5,20},0}); // C++17 or later

答案 1 :(得分:0)

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

mymap.emplace('a', 100);

第二个示例肯定会像

map1.emplace(std::piecewise_construct, std::forward_as_tuple(5, 20), std::forward_as_tuple(0));

以及从C ++ 17开始的版本也可以

map1.emplace(5, 20, 0);

查看示例herehere

答案 2 :(得分:0)

有很多可能性。您可以选择以下更适合您的任何一种。

  
      
  1. 使用make_pair
  2.   

map<pair<int,int>, int> m; m.insert(make_pair(make_pair(5,20, 0));

  
      
  1. 使用花括号
  2.   

map<pair<int,int>, int> m; m.insert({{5,20}, 0});

  
      
  1. 首先声明一个C ++对
  2.   

pair<int,int> p(5,20); map<pair<int,int>, int> m; m.insert(make_pair(p, 0));

相关问题