ranges::unique
ranges::unique (연속 중복 제거 — ranges)
범위에서 연속으로 반복되는 중복 원소를 제거하는 ranges 버전 알고리즘이에요. <algorithm> 헤더에 있어요.
출처: cppreference
본문
std::ranges::unique는 [first, last)에서 연속적으로 반복되는 원소를 제거해, 살아남은 요소를 앞으로 당겨요.
namespace std::ranges {
template< std::permutable I, std::sentinel_for<I> S,
class Proj = std::identity,
std::indirect_equivalence_relation<std::projected<I, Proj>> C = ranges::equal_to >
constexpr ranges::subrange<I> unique( I first, S last, C comp = {}, Proj proj = {} );
}
- 반환 값:
subrange<I>로, 살아남은 요소들의 새 구간. 뒤쪽엔 값이 불확정인 요소가 남아요. - 실제 크기 축소는 컨테이너
erase로 해야 해요(unique-erase 관용구).
std::vector<int> v{1, 1, 2, 3, 3, 3, 4, 1};
auto r = std::ranges::unique(v);
v.erase(r.begin(), r.end());
// v == {1,2,3,4,1} (상대 연속 중복만 제거)
정렬 후 쓰면 전체 중복 제거가 되는 "연속 중복 제거" 함수예요.