enum Symbols
{
BAR,
BELL,
PLUM,
ORANGE,
CHERRY,
DOESNOTMATTER,
}wheel1, wheel2, wheel3;
map<Symbols[3], int> symb = {{{BAR, BAR, BAR}, 250},
{{BELL, BELL, BELL}, 20},
{{BELL, BELL, BAR}, 20},
{{PLUM, PLUM, BAR}, 14},
{{PLUM, PLUM, PLUM}, 14},
{{ORANGE, ORANGE, BAR}, 10},
{{ORANGE, ORANGE, ORANGE}, 10},
{{CHERRY, CHERRY, CHERRY}, 7},
{{CHERRY, CHERRY, DOESNOTMATTER}, 5},
{{CHERRY, DOESNOTMATTER, DOESNOTMATTER}, 2}};
我已经定义了一个名为Symbols的枚举器。我正在尝试创建一个地图,其关键是符号枚举数组,值是整数。
当我尝试运行此程序时,出现错误“ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c ++ / v1 / utility:268:11:数组初始值设定项必须是初始化列表“。
我在这里做错了什么?我也试过插入这些值。错误是一样的。
答案 0 :(得分:4)
原始数组Symbols[3]
与容器的要求不匹配std::map
的关键字类型。
std :: map符合Container,AllocatorAwareContainer,AssociativeContainer和ReversibleContainer的要求。
CopyInsertable
EqualityComparable
Destructible
您可以使用std::array
或std::vector
。如:
std::map<std::array<Symbols, 3>, int> symb = ...
答案 1 :(得分:1)
您无法执行此操作的原因是原始数组不可复制或可分配,并且map
,vector
,set
等需要复制操作。
请改用:
std:array<Symbol,3>
答案 2 :(得分:1)
对于地图,Key至少需要:
为实现这一目标,我将通过一个结构:
struct key
{
Symbol k1;
Symbol k2;
Symbol k3;
key(Symbol _k1, Symbol _k2, Symbol _k3):
k1(_k1), k2(_k2), k3(_k3)
{}
key(key const &) = default;
key(key &&) = default;
key &operator=(key const &) = default;
key &operator=(key &&) = default;
bool operator<(key const & rhs)
{
// perform less operation between this and rhs
}
};
答案 3 :(得分:0)
这样可行:
#include <iostream>
#include <map>
#include <array>
enum Symbols
{
BAR,
BELL,
PLUM,
ORANGE,
CHERRY,
DOESNOTMATTER,
};
void main()
{
std::map<std::array<Symbols,3>, int> symb ( {
{ { Symbols::BAR, Symbols::BAR, Symbols::BAR }, 250 }
} );
std::array<Symbols, 3> bar_sym = { Symbols::BAR, Symbols::BAR, Symbols::BAR };
std::cout << symb[bar_sym] << std::endl;
}