C ++用枚举类对象分配std :: map值

时间:2018-10-01 12:01:38

标签: c++ c++11 enums typedef unordered-map

考虑以下代码。 在我的真实情况下,我有这样的事情:

typedef enum
{
    vehicle,
    computer,

} Article;

这就是我要构造的:

enum class status{
    notPaid,
    paid,
};


struct S {
    status status_vehicle;
    status status_computer;

    std::map<Article, status> mymap =
    {
        {vehicle,  S::status_vehicle},
        {computer, S::status_computer},
    };
};

int main ()
{   
    Article a1 = vehicle;
    S::mymap.at(a1) = status::paid; // this line doesn't work
}

但是,最后一行(S::mymap.at(a1) = status::paid;)不起作用。我尝试了不同的方法,例如使用find()的{​​{1}}函数。我收到错误“在只读对象中分配成员std::map”。

有人知道怎么做吗?另外也许如何以更好的方式设计整体? (整个过程来自“这就是我要构建的行”)。 另外,我宁愿使用std::pair<Article, status>::second代替unordered_map,但无法正常工作。谢谢

2 个答案:

答案 0 :(得分:1)

因为mymap不是静态的。

您可以这样做:

Article a1 = vehicle; 
struct S mystruct;
mystruct.mymap.at(a1) = status::paid;  

或将static添加到结构中的成员:

struct S {
    status status_vehicle;
    status status_computer;

    static std::map<Article, status> mymap;
};

但是当使用静态时,必须在mymap的声明外部初始化struct S以及不能使用struct的非静态成员的成员

std::map<Article,status> S::mymap={
    {vehicle,S::status_vehicle}
};
  

该类的所有对象共享一个静态成员。所有静态数据   如果没有其他对象,则在创建第一个对象时将其初始化为零   存在初始化

从逻辑上讲,在您的示例中效果不佳

https://en.cppreference.com/w/cpp/language/static

答案 1 :(得分:0)

由于myMap是非静态的,因此无法像静态变量一样分配它。 您可以这样更改代码:

int main ()
{   
    Article a1 = vehicle; 
    S ss;
    ss.mymap.at(a1) = status::paid;    
}