lwx*_*ted 2 c++ stl unordered-map hashtable trie
例如,请考虑以下trie实现.
struct Trie: unordered_map<char, pair<bool, Trie> >
Run Code Online (Sandbox Code Playgroud)
是否应该struct Trie存储指针?
struct Trie: unordered_map<char, pair<bool, Trie *> >
Run Code Online (Sandbox Code Playgroud)
由于struct Trie对象可能变得非常大,因此随着trie变大,第一次实现效率会降低吗?
在这里,管理内部内存alloc和dealloc Trie应该不会太麻烦,所以不考虑手动的麻烦,new / delete应该首选哪种实现?
由于您显然有足够的C++ 11可供使用std::unordered_map,因此您应该强烈避免拥有原始指针.而不是pair<bool, Trie*>,使用pair<bool, unique_ptr<Trie>>.
您根本无法使用第一种方法,因为std::pair(并且所有标准库容器)都要求其模板参数是完整类型,在您的情况下Trie不是这样 - 尚未完全定义.
公开继承标准库容器通常是一个坏主意; 它们不是为它而设计的,没有虚拟接口.喜欢成分.