Использование значения enum в качестве записи на карте в c ++

0

У меня есть перечисление:

enum FlowType {

        LEVEL_FLOW = 1,
        PARTITION_FLOW = 3,
        ORDERBOOK_EVENT_FLOW = 4
}

Я хочу создать такую карту, чтобы при поиске целой части выше я должен вернуть часть "LEVEL_FLOW".

Я не могу придумать выражение о карте и вставки. Пожалуйста помоги.

Я так и пытался:

std::map<int, FlowType > FlowsMap;
FlowsMap.insert(std::make_pair<1, FlowType.LEVEL_FLOW >);
  • 0
    Или FlowType::LEVEL_FLOW
  • 1
    Почему вы хотите отобразить перечисление в int с тем же значением? Перечисления являются целыми числами.
Показать ещё 2 комментария
Теги:
enums

4 ответа

2
Лучший ответ

Вы должны использовать только LEVEL_FLOW не FlowType.LEVEL_FLOW, если enum находится в той же области. В противном случае укажите область действия.

  • 0
    Это правильно, но вы все равно столкнетесь с проблемами, пытаясь скомпилировать std :: make_pair <1, LEVEL_FLOW>.
  • 0
    @JulienB. - вот так: ideone.com/iDka7A ? Какие "неприятности" вы имеете в виду?
Показать ещё 1 комментарий
3

Если вы хотите добавить значения:

typedef enum e
{
    ONE = 1,
    TWO = 2,
    THREE = 3
} etype;

int main(int arc, char **argv)
{
    std::map <etype, std::string> mmap;
    mmap[THREE] = 3;
}
  • 0
    Знаете ли вы, какова ценность mmap[THREE] ?
0

Обратите внимание, что вы используете перечисления C-стиля.

Если вы хотите придерживаться их, вы можете исправить это, изменив свой код на:

FlowsMap.insert(std::make_pair<1, LEVEL_FLOW >);

Если вы хотите, чтобы имя перечисления стало частью области действия (например, вы пытаетесь в своем примере), просмотрите этот поток в списках переходов на языке С++.

0

Проблема, с которой вы сталкиваетесь с вставкой, лежит в вашем синтаксисе. Вы должны написать:

FlowsMap.insert(std::make_pair(1, FlowType.LEVEL_FLOW));  
// make_pair is a function (make_pair()), pair is a type (pair <>)

или более красиво

FlowsMap[1] = LEVEL_FLOW; 

Нет необходимости перегружать оператор сравнения для элемента ценности на вашей карте. Более того, даже если ваш ключ должен быть перечислением FlowType, он не понадобится.

Однако мне интересно, действительно ли вам нужна карта для этого... когда вы можете использовать свой int в своем перечислении типа:

int myInt = 1;
FlowType ft = static_cast<FlowType> (myInt);

Единственная проблема будет в том случае, если некоторый int не имеет связанного значения перечисления. Вы можете предотвратить это с помощью своей карты с помощью метода find(). Если вы знаете, что этого не произойдет, вы можете отказаться от использования карты.

  • 0
    "или, что лучше" - insert и operator[] не являются (всегда) одинаковыми для std::map .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню