2012-05-21 80 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()。只要分類到另一個矢量,你可以做我上面描述的同樣的事情。