我想快速从带有 ordered_unique 索引的 boost multi_index 容器中检索中值,但是索引迭代器不是随机访问(我不明白为什么它们不能,尽管这与 std::set 一致...)。
除了增加迭代器 container.size() / 2 次之外,还有更快/更整洁的方法吗?
我想快速从带有 ordered_unique 索引的 boost multi_index 容器中检索中值,但是索引迭代器不是随机访问(我不明白为什么它们不能,尽管这与 std::set 一致...)。
除了增加迭代器 container.size() / 2 次之外,还有更快/更整洁的方法吗?
Boost.MultiIndex 提供随机访问索引,但这些索引不直接处理任何顺序。但是,您可以在插入新元素后使用 sort 成员函数对这些索引进行排序,这样您就可以有效地获得中位数。
看来您应该向 Boost.MultiIndex 发出请求,以便可以直接使用订单完成插入,因为这应该更有效。
我在不同的上下文中遇到了同样的问题。似乎 STL 和 Boost 没有提供一个有序容器,它可以随机访问以使用排序(例如,用于比较)。
我(不太漂亮)的解决方案是使用一个执行输入并将其“过滤”在一组中的类。输入操作完成后,它只是将集合的所有迭代器复制到一个向量中,并将其用于随机访问。
此解决方案仅适用于非常有限的环境:您对容器执行一次输入。如果您再次更改添加到容器中,则必须再次复制所有迭代器。使用起来确实很笨拙,但确实有效。