【发布时间】:2012-05-27 13:34:26
【问题描述】:
我使用 std::set 对无序重复值的向量进行排序。每次在我的集合中找到一个元素时,我也需要知道该元素的位置(索引)。我的集合中有很多元素(数十万个),使用 std::distance() 给我带来了糟糕的性能。
std::distance 是唯一的出路吗?
【问题讨论】:
-
如果要对向量进行排序,则不需要使用集合。一旦你有一个排序的向量,只需使用 binary_search 就可以了。我发现 std::set 相当慢。
-
鉴于你的方法,你为什么需要这个职位? find 返回迭代器,您可以使用这些迭代器移动事物。例如,参见 std::swap。
-
我正在清理一个网格数据结构,它使用索引来定义多边形。查找给定顶点后,我还需要它在该列表中的索引。
-
您是否要删除重复项?如果是这样,那么只需使用
std::sort后跟std::unique。或者也许从一开始就使用std::set而不是std::vector,然后您将始终拥有排序的、唯一的值。
标签: c++