问题很简单:我们有一个类,它有成员 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 是不可能的。
问题很简单:我们有一个类,它有成员 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 是不可能的。
Boost MultiIndex 可能有一个明显的缺点,它会在集合的每次突变后尝试使所有索引保持最新。如果您有一个包含许多单独写入的数据加载阶段,这可能会造成很大的性能损失。
Boost Multi Index 的使用模式可能不符合项目(成员)的编码风格(和品味......)。这应该是一个小缺点,但我想我会提到它
如前所述ildjarn
,Boost MI 目前还不支持移动语义
否则,在大多数情况下,我会认为 Boost MultiIndex 更胜一筹,因为您不太可能达到它收到的测试量。
您想考虑将所有映射包含在一个类中,任意决定其中一个容器作为存储“真实”对象的容器,然后只使用std::map
带有映射类型的原始指针的第一个元素std::map
.
但是,如果您需要复制这些地图,这将更加困难。