sub_match_operator_cmp

sub_match_operator_cmp (sub_match 비교 연산자)

std::sub_match 객체를 다른 sub_match, std::basic_string, C 스타일 문자열, 또는 단일 문자와 비교하는 비멤버 연산자 함수들을 설명해요. 이 연산자들은 정규 표현식 매칭 결과로 얻은 부분 문자열(sub_match)을 다양한 형태의 문자열 값과 편리하게 비교할 수 있게 해줘요. C++20부터는 operator<=>operator==를 기반으로 나머지 비교 연산자가 자동 합성돼요.

출처: cppreference

본문

개요

<regex> 헤더에 정의된 std::sub_match 비교 연산자는 크게 네 가지 대상을 상대로 비교를 수행해요.

  • 다른 std::sub_match 객체와 직접 비교
  • std::basic_string 객체와 비교
  • C 스타일 문자열 포인터와 비교
  • 단일 문자와 비교

각 연산자는 lhs.compare(target) 또는 rhs.compare(target)의 결과를 사용해 최종 불리언 값 또는 비교 카테고리 값을 반환해요.

연산자 목록

정의된 헤더 <regex>
직접 비교
template < class BidirIt > bool operator == ( const std::sub_match<BidirIt>& lhs, const std::sub_match<BidirIt>& rhs ); (1) (since C++11)
template < class BidirIt > bool operator != ( const std::sub_match<BidirIt>& lhs, const std::sub_match<BidirIt>& rhs ); (2) (since C++11) (until C++20)
template < class BidirIt > bool operator < ( const std::sub_match<BidirIt>& lhs, const std::sub_match<BidirIt>& rhs ); (3) (since C++11) (until C++20)
template < class BidirIt > bool operator <= ( const std::sub_match<BidirIt>& lhs, const std::sub_match<BidirIt>& rhs ); (4) (since C++11) (until C++20)
template < class BidirIt > bool operator > ( const std::sub_match<BidirIt>& lhs, const std::sub_match<BidirIt>& rhs ); (5) (since C++11) (until C++20)
template < class BidirIt > bool operator >= ( const std::sub_match<BidirIt>& lhs, const std::sub_match<BidirIt>& rhs ); (6) (since C++11) (until C++20)
template < class BidirIt > auto operator <=> ( const std::sub_match<BidirIt>& lhs, const std::sub_match<BidirIt>& rhs ); (7) (since C++20)
std::basic_string과 비교
template < class BidirIt, class Traits, class Alloc > bool operator == ( const std::sub_match<BidirIt>& lhs, const std::basic_string</*value-type-of*/<BidirIt>, Traits, Alloc>& str ); (8) (since C++11)
template < class BidirIt, class Traits, class Alloc > bool operator != ( const std::sub_match<BidirIt>& lhs, const std::basic_string</*value-type-of*/<BidirIt>, Traits, Alloc>& str ); (9) (since C++11) (until C++20)
template < class BidirIt, class Traits, class Alloc > bool operator < ( const std::sub_match<BidirIt>& lhs, const std::basic_string</*value-type-of*/<BidirIt>, Traits, Alloc>& str ); (10) (since C++11) (until C++20)
template < class BidirIt, class Traits, class Alloc > bool operator <= ( const std::sub_match<BidirIt>& lhs, const std::basic_string</*value-type-of*/<BidirIt>, Traits, Alloc>& str ); (11) (since C++11) (until C++20)
template < class BidirIt, class Traits, class Alloc > bool operator > ( const std::sub_match<BidirIt>& lhs, const std::basic_string</*value-type-of*/<BidirIt>, Traits, Alloc>& str ); (12) (since C++11) (until C++20)
template < class BidirIt, class Traits, class Alloc > bool operator >= ( const std::sub_match<BidirIt>& lhs, const std::basic_string</*value-type-of*/<BidirIt>, Traits, Alloc>& str ); (13) (since C++11) (until C++20)
template < class BidirIt, class Traits, class Alloc > auto operator <=> ( const std::sub_match<BidirIt>& lhs, const std::basic_string</*value-type-of*/<BidirIt>, Traits, Alloc>& str ); (14) (since C++20)
template < class BidirIt, class Traits, class Alloc > bool operator == ( const std::basic_string</*value-type-of*/<BidirIt>, Traits, Alloc>& str, const std::sub_match<BidirIt>& rhs ); (15) (since C++11) (until C++20)
template < class BidirIt, class Traits, class Alloc > bool operator != ( const std::basic_string</*value-type-of*/<BidirIt>, Traits, Alloc>& str, const std::sub_match<BidirIt>& rhs ); (16) (since C++11) (until C++20)
template < class BidirIt, class Traits, class Alloc > bool operator < ( const std::basic_string</*value-type-of*/<BidirIt>, Traits, Alloc>& str, const std::sub_match<BidirIt>& rhs ); (17) (since C++11) (until C++20)
template < class BidirIt, class Traits, class Alloc > bool operator <= ( const std::basic_string</*value-type-of*/<BidirIt>, Traits, Alloc>& str, const std::sub_match<BidirIt>& rhs ); (18) (since C++11) (until C++20)
template < class BidirIt, class Traits, class Alloc > bool operator > ( const std::basic_string</*value-type-of*/<BidirIt>, Traits, Alloc>& str, const std::sub_match<BidirIt>& rhs ); (19) (since C++11) (until C++20)
template < class BidirIt, class Traits, class Alloc > bool operator >= ( const std::basic_string</*value-type-of*/<BidirIt>, Traits, Alloc>& str, const std::sub_match<BidirIt>& rhs ); (20) (since C++11) (until C++20)
C 스타일 문자열과 비교
template < class BidirIt > bool operator == ( const std::sub_match<BidirIt>& lhs, const /*value-type-of*/<BidirIt>* s ); (21) (since C++11)
template < class BidirIt > bool operator != ( const std::sub_match<BidirIt>& lhs, const /*value-type-of*/<BidirIt>* s ); (22) (since C++11) (until C++20)
template < class BidirIt > bool operator < ( const std::sub_match<BidirIt>& lhs, const /*value-type-of*/<BidirIt>* s ); (23) (since C++11) (until C++20)
template < class BidirIt > bool operator <= ( const std::sub_match<BidirIt>& lhs, const /*value-type-of*/<BidirIt>* s ); (24) (since C++11) (until C++20)
template < class BidirIt > bool operator > ( const std::sub_match<BidirIt>& lhs, const /*value-type-of*/<BidirIt>* s ); (25) (since C++11) (until C++20)
template < class BidirIt > bool operator >= ( const std::sub_match<BidirIt>& lhs, const /*value-type-of*/<BidirIt>* s ); (26) (since C++11) (until C++20)
template < class BidirIt > auto operator <=> ( const std::sub_match<BidirIt>& lhs, const /*value-type-of*/<BidirIt>* s ); (27) (since C++20)
template < class BidirIt > bool operator == ( const /*value-type-of*/<BidirIt>* s, const std::sub_match<BidirIt>& rhs ); (28) (since C++11) (until C++20)
template < class BidirIt > bool operator != ( const /*value-type-of*/<BidirIt>* s, const std::sub_match<BidirIt>& rhs ); (29) (since C++11) (until C++20)
template < class BidirIt > bool operator < ( const /*value-type-of*/<BidirIt>* s, const std::sub_match<BidirIt>& rhs ); (30) (since C++11) (until C++20)
template < class BidirIt > bool operator <= ( const /*value-type-of*/<BidirIt>* s, const std::sub_match<BidirIt>& rhs ); (31) (since C++11) (until C++20)
template < class BidirIt > bool operator > ( const /*value-type-of*/<BidirIt>* s, const std::sub_match<BidirIt>& rhs ); (32) (since C++11) (until C++20)
template < class BidirIt > bool operator >= ( const /*value-type-of*/<BidirIt>* s, const std::sub_match<BidirIt>& rhs ); (33) (since C++11) (until C++20)
단일 문자와 비교
template < class BidirIt > bool operator == ( const std::sub_match<BidirIt>& lhs, const /*value-type-of*/<BidirIt>& ch ); (34) (since C++11)
template < class BidirIt > bool operator != ( const std::sub_match<BidirIt>& lhs, const /*value-type-of*/<BidirIt>& ch ); (35) (since C++11) (until C++20)
template < class BidirIt > bool operator < ( const std::sub_match<BidirIt>& lhs, const /*value-type-of*/<BidirIt>& ch ); (36) (since C++11) (until C++20)
template < class BidirIt > bool operator <= ( const std::sub_match<BidirIt>& lhs, const /*value-type-of*/<BidirIt>& ch ); (37) (since C++11) (until C++20)
template < class BidirIt > bool operator > ( const std::sub_match<BidirIt>& lhs, const /*value-type-of*/<BidirIt>& ch ); (38) (since C++11) (until C++20)
template < class BidirIt > bool operator >= ( const std::sub_match<BidirIt>& lhs, const /*value-type-of*/<BidirIt>& ch ); (39) (since C++11) (until C++20)
template < class BidirIt > auto operator <=> ( const std::sub_match<BidirIt>& lhs, const /*value-type-of*/<BidirIt>& ch ); (40) (since C++20)
template < class BidirIt > bool operator == ( const /*value-type-of*/<BidirIt>& ch, const std::sub_match<BidirIt>& rhs ); (41) (since C++11) (until C++20)
template < class BidirIt > bool operator != ( const /*value-type-of*/<BidirIt>& ch, const std::sub_match<BidirIt>& rhs ); (42) (since C++11) (until C++20)
template < class BidirIt > bool operator < ( const /*value-type-of*/<BidirIt>& ch, const std::sub_match<BidirIt>& rhs ); (43) (since C++11) (until C++20)
template < class BidirIt > bool operator <= ( const /*value-type-of*/<BidirIt>& ch, const std::sub_match<BidirIt>& rhs ); (44) (since C++11) (until C++20)
template < class BidirIt > bool operator > ( const /*value-type-of*/<BidirIt>& ch, const std::sub_match<BidirIt>& rhs ); (45) (since C++11) (until C++20)
template < class BidirIt > bool operator >= ( const /*value-type-of*/<BidirIt>& ch, const std::sub_match<BidirIt>& rhs ); (46) (since C++11) (until C++20)
헬퍼 타입 별칭
template < class BidirIt > using /*value-type-of*/ = typename std::iterator_traits<BidirIt>::value_type; (47) (설명 전용*)
template < class BidirIt > using /*cat-type-of*/ = std::compare_three_way_result_t<std::basic_string</*value-type-of*/<BidirIt>>>; (48) (since C++20) (설명 전용*)

sub_match를 다른 sub_match, std::string, C 스타일 문자열 또는 단일 문자와 비교해요.

<, <=, >, >=, != 연산자는 각각 operator<=>operator==로부터 합성돼요. (since C++20)

매개변수

lhs, rhs - 비교할 sub_match
str - 비교할 std::basic_string
s - 비교할 C 스타일 문자열을 가리키는 포인터
ch - 비교할 문자

반환값

target은 다음과 같이 정의돼요.

  • 오버로드 (1–14, 21–27, 34–40)에서는 lhs가 비교 대상이에요.
  • 오버로드 (15–20, 28–33, 41–46)에서는 rhs가 비교 대상이에요.

반환값은 다음과 같이 정의돼요.

연산자 반환값
오버로드 (1–14, 21–27, 34–40) — lhs가 왼쪽인 경우
== lhs.compare(target) == 0
!= lhs.compare(target) != 0
< lhs.compare(target) < 0
<= lhs.compare(target) <= 0
> lhs.compare(target) > 0
>= lhs.compare(target) >= 0
<=> static_cast<cat-type-of<BidirIt>>(lhs.compare(target) <=> 0)

참고 사항

operator<=>의 반환 타입은 비교 카테고리 타입임이 보장돼요. value-type-of<BidirIt>char, wchar_t, char8_t, char16_t, 또는 char32_t인 경우 operator<=>의 반환 타입은 std::strong_ordering이에요.

예제

이 섹션은 불완전해요. 이유: 예제 없음

결함 보고서

다음 동작 변경 결함 보고서는 이전에 발표된 C++ 표준에 소급 적용됐어요.

DR 적용 대상 발표된 동작 올바른 동작
LWG 2217 C++11 std::string과 비교할 때 compare()의 인자가 str.c_str()이었어요. 인자는 string_type(str.data(), str.size())이에요.

같이 보기

compare 일치하는 부분 시퀀스를 비교해요 (공개 멤버 함수) [edit]

더 알아보기 (Learn more)

cppreference