C ++ Назначение значений std :: map с помощью объекта перечисления - PullRequest
0 голосов
/ 01 октября 2018

Рассмотрим следующий код.В моем реальном сценарии у меня что-то вроде этого:

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() функцию std::map.Я получил ошибку «назначение члена std::pair<Article, status>::second в объекте только для чтения».

Кто-то знает, как это сделать?Также, может быть, как лучше спроектировать целое?(все из строки «И это то, что я пытаюсь построить»).Также я бы предпочел использовать unordered_map вместо map, но он не работал.Спасибо

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Так как myMap не является статическим, его нельзя назначить как статические переменные.Вы можете изменить свой код следующим образом:

int main ()
{   
    Article a1 = vehicle; 
    S ss;
    ss.mymap.at(a1) = status::paid;    
}
0 голосов
/ 01 октября 2018

Поскольку 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;
};

Но при использовании static вы должны инициализировать mymap вне объявления struct S и члена, который вы не можете использовать нестатические члены struct

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

Статический членобщий для всех объектов класса.Все статические данные инициализируются нулями при создании первого объекта, если нет других инициализаций

И в вашем примере логически это не хорошо

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

...