答案 0 :(得分:5)
boost :: multi_index是你问题的答案。有关如何使用它的更多信息,请参阅there。
答案 1 :(得分:1)
以上是上述的另一种选择,您选择的解决方案取决于您的需求。 Grab SqlLite将有关对象的数据存储在数据库中并为它们运行查询。
答案 2 :(得分:1)
Fire Lancer,您没有正确限定Boost.MultiIndex名称,而不是例如boost::indexed_by
您必须编写boost::multi_index::indexed_by
等等。
答案 3 :(得分:0)
两张地图的方法(一张以ID为键,第二张以名称为键),对我来说似乎不错。它实现起来很简单,而且效果很好。
我看到其他答案建议加强库。如果你已经在项目中使用了boost,那么它可能是一个很好的解决方案。如果你不这样做 - 我不确定是否值得为这个简单的案例增加你的项目。
答案 4 :(得分:-1)
您可以将数据存储在std :: vector中,并使用std :: find算法查找您的项目。 find算法接受不同的比较器,因此只需定义一个匹配id的匹配器和另一个匹配名称的算法。
find算法比std :: map和std :: set的find方法慢,所以如果性能是一个很大的问题,那么你可能最好用交换空间来提高速度并使用2个地图或使用boost
编辑,只是想了想。使用id作为键将数据存储在地图中,因为这是常见的情况。然后使用std :: find算法和一个谓词匹配的谓词,用于不常见的情况。这应该减少(但不是删除)性能问题