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

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

Barbara Streisand
풀어 주다: 2024-12-20 20:24:10
원래의
118명이 탐색했습니다.

How Can I Efficiently Remove Duplicates and Sort a C   Vector?

벡터의 중복 삭제 및 정렬 최적화

C에서 벡터는 요소를 저장하기 위한 일반적인 데이터 구조입니다. 그러나 중복 및 정렬 요구 사항이 있는 대규모 벡터를 효율적으로 관리하는 것은 어려울 수 있습니다.

비효율적인 접근 방식

코드 조각은 std를 사용하여 중복을 지우고 벡터를 정렬하려는 시도를 제공했습니다. :unique 및 std::sort:

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

그러나 이 접근 방식은 중복 항목을 제거하지 못합니다.

선호 접근 방식

더 나은 성능을 제공하는 몇 가지 대체 접근 방식이 있습니다.

1. std::set 사용

std::set는 정렬되고 고유한 요소 집합을 자동으로 유지 관리하는 컨테이너입니다. 벡터를 집합으로 변환하면 중복 항목을 효율적으로 제거할 수 있습니다.

std::set<int> s(vec.begin(), vec.end());
로그인 후 복사

정렬된 데이터를 다시 벡터로 전송할 수 있습니다:

vec.assign(s.begin(), s.end());
로그인 후 복사

2. 수동으로 중복 항목 지우기

벡터를 반복하고 연속적인 중복 항목을 확인하여 중복 항목을 수동으로 지울 수도 있습니다.

for (auto it = vec.begin(); it != vec.end(); ) {
  if (*it == *(it+1)) {
    it = vec.erase(it);
  } else {
    ++it;
  }
}
로그인 후 복사

정렬 고려 사항

정렬된 순서를 유지하기 위해서는 중복 제거 후 정렬이 필요합니다. 그러나 모든 경우에 순서가 보장되는 것은 아닙니다.

사례 1: 먼저 정렬하고 이후에 삭제

중복 항목을 삭제하기 전에 벡터를 정렬하는 경우 std:: 고유는 정렬된 순서를 유지할 가능성이 높습니다.

사례 2: 먼저 지우고 정렬 이후

정렬 전 중복된 내용을 지울 경우 순서가 보장되지 않을 수 있습니다. 제거 순서가 후속 요소의 인덱스에 영향을 미칠 수 있기 때문입니다.

성능

이러한 접근 방식의 성능은 중복 횟수에 따라 다릅니다. 중복 항목이 많은 경우 세트로 변환했다가 다시 벡터로 변환하는 것이 중복 항목을 수동으로 지우는 것보다 더 빠를 수 있습니다. 그러나 중복된 항목 수가 적은 경우 수동으로 삭제하는 것이 더 효율적일 수 있습니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿