boost::multi_index 的备选方案
Alternatives for boost::multi_index
我想使用可以创建字典的东西,例如,
多键
Key1 which will map to SomeObject
Key2
Key3
Key4
etc
我想根据任意键查找。 boost::multi_index 我有奇怪的问题,正在寻找替代方案。
我的编译器是 Visual Studio 2005,我使用 boost 并且不要使用 C++11。任何提升(除了 multi_index)的东西都是最受欢迎的。
当然你应该解决你的奇怪问题,但这里有一个很好用的技巧:
std::vector<X> v; // elements of X in some order
std::vector<std::reference_wrapper<X const> > index1(v.begin(), v.end());
std::vector<std::reference_wrapper<X const> > index2(v.begin(), v.end());
// sort the indexes
std::sort(index1.begin(), index1.end(), by_property1);
std::sort(index2.begin(), index2.end(), by_property2);
当然,在突变下保持同步并控制排序索引的运行时成本成为一项稍微棘手的任务,这就是为什么 - 大多数时候 - 你会想要 multi_index_container
此外,请注意,为了更加无忧无虑,您需要将 vector
替换为 list
以享受 iterator/reference 稳定性。
我想使用可以创建字典的东西,例如,
多键
Key1 which will map to SomeObject
Key2
Key3
Key4
etc
我想根据任意键查找。 boost::multi_index 我有奇怪的问题,正在寻找替代方案。
我的编译器是 Visual Studio 2005,我使用 boost 并且不要使用 C++11。任何提升(除了 multi_index)的东西都是最受欢迎的。
当然你应该解决你的奇怪问题,但这里有一个很好用的技巧:
std::vector<X> v; // elements of X in some order
std::vector<std::reference_wrapper<X const> > index1(v.begin(), v.end());
std::vector<std::reference_wrapper<X const> > index2(v.begin(), v.end());
// sort the indexes
std::sort(index1.begin(), index1.end(), by_property1);
std::sort(index2.begin(), index2.end(), by_property2);
当然,在突变下保持同步并控制排序索引的运行时成本成为一项稍微棘手的任务,这就是为什么 - 大多数时候 - 你会想要 multi_index_container
此外,请注意,为了更加无忧无虑,您需要将 vector
替换为 list
以享受 iterator/reference 稳定性。