是否建议不要将大型STL对象作为值存储到std::unordered_map中?
Is it advised against to store a large STL object into std::unordered_map as value?
例如,考虑下面的trie实现。
struct Trie: unordered_map<char, pair<bool, Trie> >
应该存储指向struct Trie
的指针吗?
struct Trie: unordered_map<char, pair<bool, Trie *> >
由于struct Trie
对象可以变得相当大,当树变大时,第一个实现的效率会降低吗?
这里,管理内部内存分配&Trie
的释放应该不会太麻烦,所以不考虑手动new / delete
的麻烦,应该首选哪种实现?
-
因为你显然有足够的c++ 11可用来使用
std::unordered_map
,你应该强烈避免拥有原始指针。用pair<bool, unique_ptr<Trie>>
代替pair<bool, Trie*>
-
你根本不能使用第一种方法,因为
std::pair
(和所有标准库容器)要求它的模板参数是完整类型,这在你的情况下是不正确的-Trie
还没有完全定义。 -
从标准库容器公开继承通常是一个坏主意;它们不是为此而设计的,也没有虚拟接口。喜欢作文。
相关文章:
- std::原子加载和存储都需要吗
- 如何从存储在std::映射中的std::集中删除元素
- 使用 pqxx 将 std::vector 存储在 postgresql 中,并从数据库中检索它
- 在std::vector上存储带有模板的类实例
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 将无符号字符的向量存储在数组中会给我 std::bad_alloc
- 如何调用存储在指向"std::函数"的指针中的 lambda?
- 如何访问存储在 std::variant 中的类的方法
- std::vector move 而不是交换到空 vector 并释放存储
- 将可变参数模板类存储到 std::vector 中
- 在 std::vector<无符号字符中存储任意数据的方法>
- 是否可以将具有不同签名的 lambda 存储在 std::vector 中并在函数中执行它们(使用各自的参数)?
- "p"数组如何使用 std::normal_distribution 存储以下代码中的值C++?
- "std::string"是否将其字符作为签名字符在内部存储?
- std::set 是否将对象连续存储在内存中?
- 将数据从 std::Vector 存储到 Eigen::Vector 时出错
- C++:将 std::set_union() 输出存储在 std::multiset 中
- 使用 std::list 存储顶点并使用 SFML 绘制它们
- 从其存储的回调中删除 std::函数是否安全
- 使用 std::map 存储在 std::any 中,然后通过 std::any_cast 访问