백엔드 개발 C++ C에서 큰 벡터를 효율적으로 중복 제거하고 정렬하려면 어떻게 해야 합니까?

C에서 큰 벡터를 효율적으로 중복 제거하고 정렬하려면 어떻게 해야 합니까?

Dec 31, 2024 pm 07:00 PM

How Can I Efficiently Deduplicate and Sort a Large Vector in C  ?

벡터 중복 제거 및 정렬 최적화

중복을 지우고 큰 벡터를 정렬하는 것은 프로그래밍에서 중요한 작업일 수 있습니다. 다양한 접근 방식을 살펴보고 이 프로세스에서 효율성을 달성하는 방법을 살펴보겠습니다.

1. 정렬 및 고유 결합:

제공된 코드 조각은 std::erase 및 std::sort를 사용하여 중복 항목을 지우고 벡터를 정렬하려고 시도합니다. 그러나 std::unique에는 정렬된 입력 반복자가 필요하기 때문에 작동하지 않습니다.

이 문제를 해결하려면 먼저 벡터를 정렬한 다음 std::unique를 적용하여 중복 항목을 제거할 수 있습니다.

std::sort(vec.begin(), vec.end());
vec.erase(std::unique(vec.begin(), vec.end()), vec.end());
로그인 후 복사

2. 중복 항목 먼저 지우기 또는 먼저 정렬:

std::unique 알고리즘의 시간 복잡도는 O(n)이므로 정렬하기 전에 중복 항목을 삭제하는 것이 일반적으로 시간 복잡도 측면에서 더 효율적입니다. 여기서 n은 입력 벡터의 크기. 하지만 벡터가 정렬된 상태를 유지하려면 중복된 항목을 삭제한 후 정렬이 필요합니다.

3. 세트 사용:

링크된 답변에서 언급했듯이 std::set을 사용하면 중복이 심각한 대형 벡터를 처리하는 데 더 효율적일 수 있습니다. 세트는 요소를 삽입할 때 중복 항목을 자동으로 제거합니다. 벡터를 집합으로 변환하고 요소를 삽입한 다음 다시 벡터로 변환하여 단일 단계로 중복 제거 및 정렬을 수행할 수 있습니다.

성능 비교:

다양한 접근 방식(고유한 정렬을 사용한 벡터, 수동 집합 변환, 집합 생성자 변환)을 벤치마킹하면 중복 수가 상당할 때 집합으로 변환하고 데이터를 벡터에 다시 덤프하는 것은 벡터 기반 기술을 사용하는 것보다 놀라울 정도로 빠릅니다.

결론적으로, 중복이 많은 대형 벡터의 경우 세트를 사용하는 것이 중복을 지우고 정렬하는 가장 효율적인 방법을 제공합니다. 또한 수동 집합 변환은 집합 생성자를 사용하는 것보다 빠른 경향이 있습니다.

위 내용은 C에서 큰 벡터를 효율적으로 중복 제거하고 정렬하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

C 언어 함수에 의해 반환 된 값 유형은 무엇입니까? 반환 값을 결정하는 것은 무엇입니까? C 언어 함수에 의해 반환 된 값 유형은 무엇입니까? 반환 값을 결정하는 것은 무엇입니까? Mar 03, 2025 pm 05:52 PM

C 언어 함수에 의해 반환 된 값 유형은 무엇입니까? 반환 값을 결정하는 것은 무엇입니까?

Gulc : C 도서관은 처음부터 구축되었습니다 Gulc : C 도서관은 처음부터 구축되었습니다 Mar 03, 2025 pm 05:46 PM

Gulc : C 도서관은 처음부터 구축되었습니다

C 언어 함수 형식 문자 케이스 변환 단계 C 언어 함수 형식 문자 케이스 변환 단계 Mar 03, 2025 pm 05:53 PM

C 언어 함수 형식 문자 케이스 변환 단계

C 언어 기능의 정의 및 호출 규칙은 무엇이며 C 언어 기능의 정의 및 호출 규칙은 무엇이며 Mar 03, 2025 pm 05:53 PM

C 언어 기능의 정의 및 호출 규칙은 무엇이며

뚜렷한 사용 및 문구 공유 뚜렷한 사용 및 문구 공유 Mar 03, 2025 pm 05:51 PM

뚜렷한 사용 및 문구 공유

메모리에 저장된 C 언어 함수의 반환 값은 어디에 있습니까? 메모리에 저장된 C 언어 함수의 반환 값은 어디에 있습니까? Mar 03, 2025 pm 05:51 PM

메모리에 저장된 C 언어 함수의 반환 값은 어디에 있습니까?

C 표준 템플릿 라이브러리 (STL)는 어떻게 작동합니까? C 표준 템플릿 라이브러리 (STL)는 어떻게 작동합니까? Mar 12, 2025 pm 04:50 PM

C 표준 템플릿 라이브러리 (STL)는 어떻게 작동합니까?

STL (정렬, 찾기, 변환 등)의 알고리즘을 효율적으로 사용하려면 어떻게합니까? STL (정렬, 찾기, 변환 등)의 알고리즘을 효율적으로 사용하려면 어떻게합니까? Mar 12, 2025 pm 04:52 PM

STL (정렬, 찾기, 변환 등)의 알고리즘을 효율적으로 사용하려면 어떻게합니까?

See all articles