2014-12-19 46 views
1

我想在unordered_map使用Node類的價值,但是當我試圖編譯,我遇到了同樣的問題,因爲Using unordered_map with custom value object in C++ 在回答針對上述問題,只有如何使用指針節點被提及。有趣的是map<Key,Node>編譯沒有錯誤。但我不想使用map,因爲map使用的時間複雜度爲O(log(n))的紅黑樹,另一方面,unordered_map似乎需要一定的時間。製作樹unordered_map

下面是Node類和一個相關的結構體。

struct Bundle{ 
    double prob; 
    vector<int> type; 
}; 

typedef struct Bundle Bundle; 
class Node { 
    public: 
     unordered_map<unsigned, Bundle> bundle; 
     unordered_map<unsigned, Node> childs; 
    private: 
     //private method here 
}; 
+0

您的關鍵是什麼? – keyser 2014-12-19 10:23:18

+0

節點是什麼類型? – Charlie 2014-12-19 10:24:06

+1

抱歉,我應該更詳細地說明問題。我將盡快編輯。 – hitochan 2014-12-19 10:24:43

回答

4
class Node { 
    public: 
     unordered_map<unsigned, Bundle> bundle; 
     unordered_map<unsigned, Node> childs; 

此時Node型還沒有完成,因爲你仍然定義它。

使用不完整類型實例化大多數標準庫模板(例如unordered_map)是未定義的行爲。它可能可能與一些編譯器一起工作,但它可能不會。原因是該模板可能需要知道諸如sizeof(Node)之類的東西,以及Node是否不是可複製構造的,並且它不能知道這些事物是否爲不完整類型。

我猜你正在使用GCC,它支持std::map(作爲非標準擴展名)中的不完整類型,但不支持std::unordered_map。您的選擇是使用不同的容器,或使用不同類型的容器(例如unordered_map<unsigned, unique_ptr<Node>>