例如,考虑以下 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
的麻烦,应优先选择哪种实现方式?
最佳答案
因为您显然有足够的 C++11 可供使用
std::unordered_map
,您应该强烈避免拥有原始指针。而不是pair<bool, Trie*>
,使用pair<bool, unique_ptr<Trie>>
.您根本无法使用第一种方法,如
std::pair
(以及所有标准库容器)要求其模板参数是完整类型,这在您的情况下是不正确的 -Trie
尚未完全定义。从标准库容器公开继承通常是一个坏主意;它们不是为此设计的,也没有虚拟接口(interface)。更喜欢构图。
关于c++ - 是否建议不要将大型 STL 对象作为值存储到 std::unordered_map 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24678901/