2012-05-21 47 views
0

我使用std :: set对无序重复值的向量进行排序。每当我在我的集​​合中找到一个元素时,我也需要知道元素的位置(索引)。在我的设置中有很多元素(数十万),而使用std :: distance()会给我带来糟糕的表现。需要查找std :: set元素的位置/索引

std :: distance是唯一的路要走吗?

+0

如果您要对矢量进行排序,那么您不需要使用集合。一旦你有一个排序的向量,只需使用binary_search就可以了。我发现std :: set相当慢。 –

+0

鉴于你的方法,你为什么需要这个职位? find返回迭代器,并且您可以使用这些迭代器移动事物。例如,请参阅std :: swap。 –

+0

我在清理一个数据结构,它是一个使用索引定义多边形的网格。在查找给定的顶点后,我也需要它在该列表中的索引。 – Prismatic

回答

-1

您可以使用std :: sort()算法对元素进行排序。然后,当您使用binary_search()在向量中找到元素时,只需从指向该元素的迭代器中减去调用begin()的结果即可。

如果您不想覆盖原始矢量,另一种方法是使用std :: partial_sort_copy()。只要分类到另一个矢量,你可以做我上面描述的同样的事情。