是否建议不要将大型STL对象存储为std :: unordered_map作为值?

时间:2014-07-10 14:14:47

标签: c++ stl hashtable unordered-map trie

例如,请考虑以下trie实现。

struct Trie: unordered_map<char, pair<bool, Trie> >

是否应该存储指向struct Trie的指针?

struct Trie: unordered_map<char, pair<bool, Trie *> >

由于struct Trie对象可能变得非常大,因此随着trie变大,第一个实现效率会降低吗?

这里,管理内部存储器分配&amp; Trie的dealloc不应该是一个麻烦,所以不考虑手动new / delete的麻烦,应该首选哪个实现?

1 个答案:

答案 0 :(得分:5)

  1. 由于您显然有足够的C ++ 11可供使用std::unordered_map,因此您应该强烈避免拥有原始指针。而不是pair<bool, Trie*>,请使用pair<bool, unique_ptr<Trie>>

  2. 您根本无法使用第一种方法,因为std::pair(以及所有标准库容器)要求其模板参数是完整类型,在您的情况下不是这样 - Trie是尚未完全定义。

  3. 公开继承标准库容器通常是一个坏主意;它们不是为它而设计的,没有虚拟接口。喜欢作文。