【发布时间】:2014-12-19 10:20:47
【问题描述】:
我想在unordered_map中使用Node类作为值,但是当我尝试编译时,我遇到了与Using unordered_map with custom value object in C++相同的问题
在上述问题的答案中,只提到了如何使用指向 Node 的指针。
有趣的是map<Key,Node> 编译没有错误。但我不想使用map,因为map 使用时间复杂度为O(log(n)) 的红黑树,另一方面,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
};
【问题讨论】:
-
Node是什么类型的?
-
抱歉,我应该更详细地说明问题。我会尽快编辑。
-
我对您的问题的第一个猜测是无法复制节点。 unordered_map 被实现为哈希表,但有时哈希表会调整大小,并且元素需要重新哈希并复制/移动到它们的新位置。如果节点无法复制或移动,则不能将其用作 unordered_map 中的值类型。如果需要,您可以改用 Node* 或 unique_ptr
。 -
@Charlie 我明白了。如果我使用 Node* 或 unique_ptr
,我想我必须手动清除所有子节点,而 map 不需要我这样做。 -
@HitoshiOtsuki,不,如果您使用
unique_ptr<Node>,您确实不需要需要手动执行任何操作,unique_ptr析构函数将运行Node析构函数
标签: c++ c++11 unordered-map