c++ - 使用值为 std::shared_ptr 的映射是否是具有多索引类列表的良好设计选择?

标签 c++ c++11 shared-ptr stdmap boost-multi-index

问题很简单: 我们有一个类(class),成员有 a,b,c,d... 我们希望能够通过为 a 或 b 或 c 提供当前值来快速搜索(键是一个成员的值)并使用新值更新类列表 ... 我想拥有一堆
std::map<decltype(MyClass.a/*b,c,d*/),shared_ptr<MyClass>> .

1) 这是个好主意吗?

2) boost multi index 是否在各个方面都优于这个手工制作的解决方案?

出于简单性/性能方面的原因,PS SQL 是不可能的。

最佳答案

  1. Boost MultiIndex 可能有一个明显的缺点,即它会尝试在集合的每次突变后使所有索引 保持最新。 如果您的数据加载阶段包含许多单独的写入,这可能会造成很大的性能损失。

  2. Boost Multi Index 的使用模式可能不适合项目(成员)的编码风格(和品味...)。这应该是一个小缺点,但我想我会提到它

  3. 正如 ildjarn 提到的,Boost MI 目前还不支持移动语义

否则,我会认为 Boost MultiIndex 在大多数情况下更胜一筹,因为您不太可能达到它收到的测试量。

关于c++ - 使用值为 std::shared_ptr 的映射是否是具有多索引类列表的良好设计选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12606891/

相关文章:

c++ - 使用 std::shared_ptr 检测循环引用

c++ - 混合 Objective C ,(*.m , *.mm & .c/.cpp ) 文件

c++ - C++ 中的 rand() 函数

c++ - 从物理输入更改音频流

c++ - 基于范围的 for 循环和 std::vector.push_back() 使程序崩溃

c++ - 访问由 std::shared_ptr 包装的类的运算符重载

c++ - 你可以使用deleter的成员来保持shared_ptr的事件吗?

c++ - Qt 更新()不起作用

c++ - 如果创建支持返回可变类型列表的通用模板 API,我应该使用 std::tuple 还是其他?

C++ 创建一个 char* 迭代器