如何在c++11/c++14中定义键为枚举、值为整数的映射?

如何在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:数组初始值设定项必须是初始值设定项列表 我做错了什么?我也尝试过插入值。错误是相同的。无法执行此操作的原因是原始数组不可复制或分配,

我已经定义了一个名为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