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

Is it advised against to store a large STL object into std::unordered_map as value?

本文关键字:std 存储 unordered map 大型 对象 STL 是否      更新时间:2023-10-16

例如,考虑下面的trie实现。

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

应该存储指向struct Trie的指针吗?

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

由于struct Trie对象可以变得相当大,当树变大时,第一个实现的效率会降低吗?

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

  1. 因为你显然有足够的c++ 11可用来使用std::unordered_map,你应该强烈避免拥有原始指针。用pair<bool, unique_ptr<Trie>>代替pair<bool, Trie*>

  2. 你根本不能使用第一种方法,因为std::pair(和所有标准库容器)要求它的模板参数是完整类型,这在你的情况下是不正确的- Trie还没有完全定义。

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