【问题标题】:Insert a pair key in map在地图中插入一对键
【发布时间】:2019-12-12 11:43:50
【问题描述】:

在map中插入pair的方法是:

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));

那么,我该怎么做呢?

【问题讨论】:

  • map1.insert({{5, 20}, 0});
  • 最接近您的代码的是 "map1.insert(pair,double>> (p,0));"
  • 您遇到什么错误?阅读它们应该始终是第一步。请将它们包括在问题中

标签: c++ stl insert


【解决方案1】:

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

  1. 使用 make_pair
 map<pair<int,int>, int> m;
 m.insert(make_pair(make_pair(5,20), 0));
  1. 使用花括号
 map<pair<int,int>, int> m;
 m.insert({{5,20}, 0});
  1. 首先声明一个 C++ 对
 pair<int,int> p(5,20);
 map<pair<int,int>, int> m;
 m.insert(make_pair(p, 0));

【讨论】:

    【解决方案2】:

    您可以根据需要手动定义和填写pairs,但使用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
    

    【讨论】:

      【解决方案3】:

      首先,如果您在插入时构造键,您可能想改用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 的示例

      【讨论】:

        猜你喜欢
        • 2018-06-28
        • 1970-01-01
        • 2012-05-22
        • 1970-01-01
        • 2021-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多