将 unordered_map 分配给一对对象
Posted
技术标签:
【中文标题】将 unordered_map 分配给一对对象【英文标题】:Assigning of unordered_map to pair of objects 【发布时间】:2020-03-20 01:59:31 【问题描述】:我试图理解unordered_map
的分配,我收到以下错误:没有匹配函数调用std::pair<foo, foo>::pair()
,根据unordered_map operator[]
的文档:
如果 k 不匹配容器中任何元素的键,该函数将插入一个具有该键的新元素并返回对其映射值的引用。
所以我试图将一个对象(来自make_pair
)分配给这个引用,我猜这是不允许的。但是使用pair<int,int>
,它可以工作,然后我想知道我是否必须为foo
声明一些其他运算符才能使其工作。
#include <bits/stdc++.h>
using namespace std;
struct foo
int n;
foo(int n): n(n) ;
;
int main()
unordered_map<int, pair<foo,foo>> m;
//m[3] = make_pair(foo(1),foo(2)); <--- error here
unordered_map<int, pair<int,int>> ii;
ii[3] = make_pair(1,2);
【问题讨论】:
您是否阅读并尝试理解错误信息? -bitmask,是的,我已经盯着它看了一段时间,我会在这里发布(很长),如果有人可以帮助我破译它,那就太好了。 好吧,如果您愿意发布它,能够帮助您破译它会很有用。 -bitmask,我发布了一个后续问题,这不是整个错误集,让我知道是否应该添加更多/更少。 (***.com/questions/60776989/…) 我为您提供了如何理解此类错误under that question 的分步指南。希望对您有所帮助。 【参考方案1】:问题在于operator []
可能必须构造一个值对象,在您的情况下为std::pair<foo, foo>
。由于foo
没有默认构造函数,所以无法构造默认的std::pair
。
您可以为foo
提供默认构造函数(包括为n
添加默认值),或者您必须使用其他方法将值插入m
。
【讨论】:
谢谢斯蒂芬,如果我使用m.insert(make_pair(key,make_pair(foo(1),foo(2)))),那么默认构造函数不会被调用,对吗?或者有更好的方法吗,谢谢! 你是对的。您可能想做一些错误检查,否则您的建议很好。以上是关于将 unordered_map 分配给一对对象的主要内容,如果未能解决你的问题,请参考以下文章
c ++:无法将一对<int,MLine *>插入到unordered_map