C++ 无序_多重映射:元组或向量形式的值
我想构建一个C++ 无序_多重映射:元组或向量形式的值,c++,unordered-map,C++,Unordered Map,我想构建一个std::unordered_map,其中的值不是单个字符串、int或float,而是元组、向量或结构。我知道这是可以做到的,正如维托里奥·罗密欧和科里克拉默所解释的。但是,我发现在添加新元素时存在一些问题 让我用@Vittorio_Romeo提供的例子来说明这一点。假设我有以下无序的地图: struct Color { int r, g, b; }; std::unordered_map<std::string, Color> colors = {
std::unordered_map
,其中的值不是单个字符串、int或float,而是元组、向量或结构。我知道这是可以做到的,正如维托里奥·罗密欧和科里克拉默所解释的。但是,我发现在添加新元素时存在一些问题
让我用@Vittorio_Romeo提供的例子来说明这一点。假设我有以下无序的地图:
struct Color
{
int r, g, b;
};
std::unordered_map<std::string, Color> colors =
{
{"red", {255, 0, 0}},
{"blue", {0, 0, 255}}
};
不知何故,这不起作用,我在这行中得到了一些错误和注释(我不太理解):
error: no matching function for call to ‘std::pair<const std::__cxx11::basic_string<char>, Color>::pair(const char [6], int)’
{ ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
错误:调用“std::pair::pair(const char[6],int)”时没有匹配的函数
{::新建((void*)uu p)u向上(std::转发(u参数));}
我做错什么了吗?这可能是我的编译器(gcc版本5.4.1)的问题吗?。我很感激你能帮我做这件事。多谢各位 表达式(1,1,1)
是括号内的表达式1,1,1
,仅此而已。而1,1,1
等于(1,1),1
使用两次,结果是单个int
值1
您需要显式指定
Color
对象,例如使用Color{1,1,1}
。代码中没有元组或向量。关于“这可能是我的编译器的问题吗?”:开发人员的生活中有三个基本步骤。1/“我的问题是由于编译器错误/cpu错误/…”。2/“我知道它来自ma代码,编译器/cpu总是正确的”。3/“该死!这一次真的是一个编译器/cpu错误!太棒了!”@manni66你说得对,谢谢你指出它。@YSC谢谢你的评论。我想我大概在1/和2/之间,不会很快达到3/我会尽我最大的努力!注意:有一个隐藏的第四步“哦,编译器错误,我会很快修复它,希望没有人看到它”。仅仅用花括号替换大括号不也是有效的吗?@SeanBurton不幸的是,在这种情况下没有。
error: no matching function for call to ‘std::pair<const std::__cxx11::basic_string<char>, Color>::pair(const char [6], int)’
{ ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }