Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无序_多重映射:元组或向量形式的值_C++_Unordered Map - Fatal编程技术网

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