순서 보존을 통한 중복 제거를 위한 STL 알고리즘
정렬되지 않은 정수 배열이 주어지면 삽입을 유지하면서 중복 요소를 제거하는 것이 작업입니다. 각 정수가 처음 나타나는 순서. 집합을 사용하는 간단한 접근 방식으로 이를 달성할 수 있지만 STL 알고리즘을 활용하는 최적화된 솔루션은 보다 효율적이고 우아한 솔루션을 제공합니다.
STL 알고리즘 기반 접근 방식
STL은 컨테이너의 효율적인 조작을 용이하게 하는 여러 알고리즘. 그러한 알고리즘 중 하나가 std::copy_if입니다. 이 알고리즘을 활용하면 원래 순서를 유지하면서 고유한 요소를 포함하는 새 벡터를 만들 수 있습니다.
이 솔루션을 구현하려면 이전에 발견된 요소를 추적하고 요소가 이미 발견된 경우 false를 반환하는 조건자 함수를 정의하세요. 처리됨. 이렇게 하면 고유한 요소만 새 벡터에 복사됩니다.
구현
C 11 이상에서는 다음을 구현하는 오버로드된 연산자()를 사용하여 함수 개체를 정의합니다. 조건자:
template <typename T> struct NotDuplicate { bool operator()(const T& element) { return s_.insert(element).second; // true if element is unique } private: std::set<T> s_; };
이 조건자를 원본 및 대상 벡터와 함께 std::copy_if에 전달합니다.
std::vector<int> uniqueNumbers; NotDuplicate<int> pred; std::copy_if(numbers.begin(), numbers.end(), std::back_inserter(uniqueNumbers), std::ref(pred));
C 11 지원을 사용할 수 없는 경우 std::remove_copy_if를 사용합니다. 동일한 결과를 얻기 위해 조건자 논리를 반전합니다.
결론
이 접근 방식은 원하는 순서 요구 사항을 준수하면서 컨테이너를 효율적으로 조작하는 STL 알고리즘의 효율성을 보여줍니다. . std::copy_if 알고리즘을 활용하면 고유 요소의 삽입 순서를 유지하면서 정렬되지 않은 벡터에서 중복 항목을 제거할 수 있습니다.
위 내용은 STL 알고리즘을 사용하여 삽입 순서를 유지하면서 정렬되지 않은 배열에서 중복 항목을 제거하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!