2012-05-21 3 views
0

정렬되지 않은 중복 값의 벡터를 정렬하기 위해 std :: set을 사용합니다. 세트에서 요소를 찾을 때마다 요소의 위치 (색인)도 알아야합니다. 내 세트에는 많은 요소 (수십만)가 있고 std :: distance()를 사용하면 성능이 떨어집니다.찾기에서 std :: set 요소의 위치/인덱스가 필요합니다.

std :: distance가 유일한 방법입니까?

+0

벡터를 정렬하려면 세트를 사용할 필요가 없습니다. 일단 정렬 된 벡터를 가지고 있다면, binary_search를 사용하면됩니다. 나는 std ::를 느리게 설정할 것을 찾는다. –

+0

귀하의 접근 방식을 고려할 때, 귀하는 왜 그 입장을 필요로합니까? find는 반복자를 반환하고, 반복자를 사용하여 주변을 이동할 수 있습니다. std :: swap을 참조하십시오. –

+0

인덱스를 사용하여 다각형을 정의하는 메쉬 인 데이터 구조를 정리하고 있습니다. 주어진 꼭지점을 찾은 후에도 그 목록에 인덱스가 필요합니다. – Prismatic

답변

-1

std :: sort() 알고리즘을 사용하여 요소를 제 위치에서 정렬 할 수 있습니다. 그런 다음 binary_search()를 사용하여 벡터에서 요소를 찾으면 요소를 가리키는 반복자에서 begin()을 호출 한 결과를 뺍니다.

또 다른 방법은 원본 벡터를 덮어 쓰지 않으려면 std :: partial_sort_copy()를 사용하는 것입니다. 다른 벡터로 정렬하면 위에서 설명한 것과 동일한 작업을 수행 할 수 있습니다.

관련 문제