У меня есть перечисление:
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 >);
Вы должны использовать только LEVEL_FLOW
не FlowType.LEVEL_FLOW
, если enum
находится в той же области. В противном случае укажите область действия.
Если вы хотите добавить значения:
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;
}
mmap[THREE]
?
Обратите внимание, что вы используете перечисления C-стиля.
Если вы хотите придерживаться их, вы можете исправить это, изменив свой код на:
FlowsMap.insert(std::make_pair<1, LEVEL_FLOW >);
Если вы хотите, чтобы имя перечисления стало частью области действия (например, вы пытаетесь в своем примере), просмотрите этот поток в списках переходов на языке С++.
Проблема, с которой вы сталкиваетесь с вставкой, лежит в вашем синтаксисе. Вы должны написать:
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(). Если вы знаете, что этого не произойдет, вы можете отказаться от использования карты.
insert
и operator[]
не являются (всегда) одинаковыми для std::map
.
FlowType::LEVEL_FLOW