unordered_multimap:元组或向量形式的值

unordered_multimap: values as tuples or vectors

本文关键字:向量 multimap 元组 unordered      更新时间:2023-10-16

我想构建一个std::unordered_map,其中的值不是单个字符串,整数或浮点数,而是元组,向量或结构。我知道这可以按照@Vittorio_Romeo和@CoryKramer在这里解释的那样完成。但是,我发现向它添加新元素存在一些问题。

让我用@Vittorio_Romeo提供的例子来说明这一点。假设我有以下unordered_map:

struct Color
{
    int r, g, b;
};
std::unordered_map<std::string, Color> colors = 
{
    {"red",  {255, 0, 0}},
    {"blue", {0, 0, 255}}
};

现在我想向这张地图添加另一个元素。我尝试执行以下操作:

colors.emplace("black",(1,1,1) );

不知何故,这不起作用,我在这一行中得到一些错误和注释(我不太明白(:

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

我做错了什么吗?可能是我的编译器(gcc 版本 5.4.1(的问题吗?我将不胜感激对此的任何帮助。谢谢!

表达式 (1, 1, 1) 是括号内1,1,1表达式,仅此而已。而1,1,1等于(1,1),1两次使用逗号运算符,结果是单int1

您需要显式指定一个Color对象,例如使用 Color{1,1,1}相反。