Namespaces
Variants

std::hive<T,Allocator>::unique

From ko.cppreference.net

 
 
 
 
template< class BinaryPredicate = std::equal_to<T> >
size_type unique( BinaryPredicate binary_pred = BinaryPredicate() );
(since C++26)

모든 연속적인 중복 요소를 컨테이너에서 제거합니다. 동일한 요소의 각 그룹에서 첫 번째 요소만 남깁니다.

더 공식적으로, 비어 있지 않은 hive의 경우, 반복자 i가 [begin() + 1, end())에서 가리키는 모든 요소 중 p(*i, *(i - 1))이 참인 요소를 지웁니다.

지워진 요소를 가리키는 참조, 포인터 및 반복자를 무효화합니다. *this의 마지막 요소가 지워지면, 끝을 지난 반복자도 무효화합니다.

해당 비교기가 동치 관계를 수립하지 않으면 동작이 정의되지 않습니다.

매개변수

p - 요소가 동등한 것으로 처리되어야 하는 경우 ​true을 반환하는 이진 술어.

술어 함수의 시그니처는 다음과 동등해야 합니다:

bool pred(const Type1 &a, const Type2 &b);

시그니처에 const &가 있을 필요는 없지만, 함수는 전달된 객체를 수정하지 않아야 하며, (const일 수 있는) Type1 및 Type2 유형의 모든 값을 값 범주에 관계없이 받아들일 수 있어야 합니다 (따라서 Type1 &는 허용되지 않으며, Type1도 Type1 이동이 복사와 동등한 경우가 아니면 허용되지 않습니다(C++11부터)).
유형 Type1 및 Type2는 hive<T,Allocator>::const_iterator 유형의 객체를 역참조한 후 암시적으로 두 유형 모두로 변환할 수 있어야 합니다. ​

유형 요구 사항
-
BinaryPredicate은 BinaryPredicate의 요구 사항을 충족해야 합니다.

반환값

제거된 요소의 개수.

복잡도

만약 empty()가 true이면, 비교가 수행되지 않습니다.

그렇지 않으면, N을 std::distance(begin(), end())로 할 때:  정확히 N-1번의 술어 p 적용.

예제

#include <iostream>
#include <hive>

std::ostream& operator<< (std::ostream& os, const std::hive<int>& container)
{
    for (int val : container)
        os << val << ' ';
    return os << '\n';
}

int main()
{
    std::hive<int> c{1, 2, 2, 3, 3, 2, 1, 1, 2};
    std::cout << "Before unique(): " << c;
    const auto count1 = c.unique();
    std::cout << "After unique():  " << c
              << count1 << " elements were removed\n";
    
    c = {1, 2, 12, 23, 3, 2, 51, 1, 2, 2};
    std::cout << "\nBefore unique(pred): " << c;
    
    const auto count2 = c.unique([mod = 10](int x, int y)
    {
        return (x % mod) == (y % mod);
    });
    
    std::cout << "After unique(pred):  " << c
              << count2 << " elements were removed\n";
}

출력:

Before unique(): 1 2 2 3 3 2 1 1 2
After unique():  1 2 3 2 1 2
3 elements were removed

Before unique(pred): 1 2 12 23 3 2 51 1 2 2
After unique(pred):  1 2 23 2 51 2
4 elements were removed

참조

범위에서 연속적인 중복 요소를 제거합니다
(함수 템플릿 & 알고리즘 함수 객체)