[英]Using enum value as a entry in a map in c++
我有一個枚舉:
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 >);
如果要添加值:
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;
}
如果enum
在同一范圍內,則應僅使用LEVEL_FLOW
而不是FlowType.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()方法在地圖上防止這種情況。 如果您知道這種情況不會發生,可以考慮避免使用地圖。
請注意,您正在使用C風格的枚舉。
如果您要堅持使用它們,可以通過將代碼更改為以下內容來解決此問題:
FlowsMap.insert(std::make_pair<1, LEVEL_FLOW >);
如果您希望枚舉名稱成為作用域的一部分(就像您在示例中嘗試的那樣),請查看C ++樣式枚舉上的該線程 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.