unordered_multimap:值作为元组或向量

unordered_multimap: values as tuples or vectors

我想构建一个 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 使用 comma operator 两次,结果是单个 int1.

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