在地图中插入一对键
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这有很多可能性。您可以选择以下任何一个更适合您。
使用 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】:您可以根据需要手动定义和填写pair
s,但使用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 的示例
【讨论】:
以上是关于在地图中插入一对键的主要内容,如果未能解决你的问题,请参考以下文章