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

标签 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 变大,第一个实现的效率是否会降低?

这里,管理Trie的内部内存分配和释放应该不会太麻烦,所以不考虑手动new/delete的麻烦,应优先选择哪种实现方式?

最佳答案

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

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

  3. 从标准库容器公开继承通常是一个坏主意;它们不是为此设计的,也没有虚拟接口(interface)。更喜欢构图。

关于c++ - 是否建议不要将大型 STL 对象作为值存储到 std::unordered_map 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24678901/

相关文章:

c++ - 在 C++ 中创建类实例的 vector

c++ - Qt 中低延迟音频合成的最佳多线程方法是什么?

c++ - weak_ptr - 取消引用 - 如果过期则抛出

c++ - 寻找 vector 中的最大元组

c++ - 了解 STL 库内存分配

c++ - 使用浮点键实现类似哈希表的数据结构,其中容差范围内的值被合并在一起

c++ - 用户管理API

c++ - C++中原始STL实现中 "construct"方法逻辑的理解

c - 在 TCL 8.4 中,如果 #define NULL 0,TclLib 函数 Tcl_SetHashValue 是否允许值为 NULL?

loops - 为什么我不能将哈希表存储在数组列表中?