如何在c++11/c++14中定义键为枚举、值为整数的映射?
我已经定义了一个名为Symbols的枚举器。我试图创建一个映射,谁的键是一个符号枚举数组,值是一个整数 当我尝试运行这个程序时,我得到一个错误/Applications/Xcode.app/Contents/Developer/toolschains/xcodefault.xctoolschain/usr/include/c++/v1/utility:268:11:数组初始值设定项必须是初始值设定项列表如何在c++11/c++14中定义键为枚举、值为整数的映射?,c++,c++11,dictionary,enums,c++14,C++,C++11,Dictionary,Enums,C++14,我已经定义了一个名为Symbols的枚举器。我试图创建一个映射,谁的键是一个符号枚举数组,值是一个整数 当我尝试运行这个程序时,我得到一个错误/Applications/Xcode.app/Contents/Developer/toolschains/xcodefault.xctoolschain/usr/include/c++/v1/utility:268:11:数组初始值设定项必须是初始值设定项列表 我做错了什么?我也尝试过插入值。错误是相同的。无法执行此操作的原因是原始数组不可复制或分配,
我做错了什么?我也尝试过插入值。错误是相同的。无法执行此操作的原因是原始数组不可复制或分配,并且需要对map、vector、set等执行复制操作。 改用这个:
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}};
无法执行此操作的原因是,原始数组不可复制或分配,并且需要对map、vector、set等执行复制操作。 改用这个:
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}};
原始数组符号[3]与容器作为密钥类型的要求不匹配
映射满足容器、分配器容器、AssociateContainer和ReversibleContainer的要求
看
您可以使用或。例如:
CopyInsertable
EqualityComparable
Destructible
原始数组符号[3]与容器作为密钥类型的要求不匹配
映射满足容器、分配器容器、AssociateContainer和ReversibleContainer的要求
看
您可以使用或。例如:
CopyInsertable
EqualityComparable
Destructible
对于map,密钥至少需要为: 可复制 不可比较 为了实现这一点,我将经过一个结构:
std::map<std::array<Symbols, 3>, int> symb = ...
对于map,密钥至少需要为: 可复制 不可比较 为了实现这一点,我将经过一个结构:
std::map<std::array<Symbols, 3>, int> symb = ...
这将有助于:
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
}
};
这将有助于:
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
}
};
我将立即尝试。我现在收到此错误-/Users/ashwinvprabhu/Documents/Work/C++/Test/TestPrograms/TestPrograms/main.cpp:25:29:没有用于初始化“map”的匹配构造函数。我正在尝试创建老虎机游戏,我需要此词典来确定奖品。有没有其他你可以推荐的库来代替地图?不要使用符号[3],只需使用struct S{Symbols S[3];};。我将立即尝试。我现在收到此错误-/Users/ashwinvprabhu/Documents/Work/C++/Test/TestPrograms/TestPrograms/main.cpp:25:29:没有用于初始化“map”的匹配构造函数。我正在尝试创建老虎机游戏,我需要此词典来确定奖品。有没有其他你可以推荐的库来代替地图?不要使用符号[3],只需使用struct S{Symbols S[3];};。对于keySee,map还需要较少的可比较性:因为map不是容器,而是关联的container@Garf365:std::vector和std::array都提供字典形式operator@ildjarn我同意你的看法,这只是为了满足mapmap的需求,而keySee的需求也比较少:因为map不是一个容器,而是一种联想container@Garf365:std::vector和std::array都提供字典形式operator@ildjarn我同意你的看法,这只是为了完成地图的要求。它们在地图上也不具有可比性。@melak47有点迂腐,std::map要求类型可以与严格排序进行比较。@user2079303这甚至不是我的意思-给定int a[3];和int b[3];,你当然可以比较它们:a