簡體   English   中英

在C ++中將枚舉值用作映射中的條目

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM