Страницы

Поиск по вопросам

четверг, 13 февраля 2020 г.

Множества как индекс в массиве C++

#множества #строки #cpp


Имеется следующий код:
enum colors { red,green,blue };//дано множество 
int myArray[colors::blue];//и массив
string strColor="Red";//Далее пользователь вводит строку, например

Точно помню, что в паскале можно было провернуть что-то вроде этого: 
myArray[strColor]=...;
    


Ответы

Ответ 1



В C++ так нельзя. Соответственно, нужно городить либо хардкод на условиях, либо пользоваться промежуточным словарем map.

Ответ 2



Используйте прослойку для преобразования string -> enum. Например так: enum colors { red, green, blue } colors colorFromString(const std::string& str) { static const std::map allColors { { "red", colors::red }, { "green", colors::green }, { "blue", colors::blue } }; auto founded = allColors.find(str); if (founded == allColors.cend()) { // Элемент не найден // Здесь необходимо как-то обработать ошибку // Например: throw std::runtime_error("Not found element " + str); } return founded->second; } Дальше можете делать так, как вы и хотели: std::string strColor = "red"; myArray[colorFromString(strColor)]=...; PS: Если будете использовать исключения - не забывайте их перехватывать.

Комментариев нет:

Отправить комментарий