在地图中插入一对键

Posted

技术标签:

【中文标题】在地图中插入一对键【英文标题】: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));" 您遇到什么错误?阅读它们应该始终是第一步。请将它们包括在问题中 【参考方案1】:

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

    使用 make_pair
 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);
    首先声明一个 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::pairstd::pair5,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);

请参阅here 和here 的示例

【讨论】:

以上是关于在地图中插入一对键的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中,在地图中插入一个向量

怎么在Excel中插入地图

在地图中使用pair作为键(C ++ / STL)

当我将向量插入无序地图时,向量的容量为 0

excel中插入图表!怎么设置图标区域内是地图呢?

如何排序地图值?