# operator==,!=,<,<=,>,>=,<=>(std::sub_match)

< cpp‎ | regex‎ | sub match

定义于头文件 `<regex>` |  |
直接比较 |  |
template< class BidirIt > bool operator==( const std::sub_match<BidirIt>& lhs, const std::sub_match<BidirIt>& rhs ); | (1) | (C++11 起)
template< class BidirIt > bool operator!=( const std::sub_match<BidirIt>& lhs, const std::sub_match<BidirIt>& rhs ); | (2) | (C++11 起) (C++20 前)
template< class BidirIt > bool operator<( const std::sub_match<BidirIt>& lhs, const std::sub_match<BidirIt>& rhs ); | (3) | (C++11 起) (C++20 前)
template< class BidirIt > bool operator<=( const std::sub_match<BidirIt>& lhs, const std::sub_match<BidirIt>& rhs ); | (4) | (C++11 起) (C++20 前)
template< class BidirIt > bool operator>( const std::sub_match<BidirIt>& lhs, const std::sub_match<BidirIt>& rhs ); | (5) | (C++11 起) (C++20 前)
template< class BidirIt > bool operator>=( const std::sub_match<BidirIt>& lhs, const std::sub_match<BidirIt>& rhs ); | (6) | (C++11 起) (C++20 前)
template< class BidirIt > /*comp-cat*/ operator<=>( const std::sub_match<BidirIt>& lhs, const std::sub_match<BidirIt>& rhs ); | (7) | (C++20 起)
`std::sub_match` 与 `std::basic_string` |  |
template< class BidirIt, class Traits, class Alloc > bool operator==( const std::sub_match<BidirIt>& sm, const std::basic_string< typename std::iterator_traits<BidirIt>::value_type, Traits,Alloc>& rhs ); | (8) | (C++11 起)
template< class BidirIt, class Traits, class Alloc > bool operator!=( const std::sub_match<BidirIt>& sm, const std::basic_string< typename std::iterator_traits<BidirIt>::value_type, Traits,Alloc>& st ); | (9) | (C++11 起) (C++20 前)
template< class BidirIt, class Traits, class Alloc > bool operator<( const std::sub_match<BidirIt>& sm, const std::basic_string< typename std::iterator_traits<BidirIt>::value_type, Traits,Alloc>& st ); | (10) | (C++11 起) (C++20 前)
template< class BidirIt, class Traits, class Alloc > bool operator<=( const std::sub_match<BidirIt>& sm, const std::basic_string< typename std::iterator_traits<BidirIt>::value_type, Traits,Alloc>& st ); | (11) | (C++11 起) (C++20 前)
template< class BidirIt, class Traits, class Alloc > bool operator>( const std::sub_match<BidirIt>& sm, const std::basic_string< typename std::iterator_traits<BidirIt>::value_type, Traits,Alloc>& st ); | (12) | (C++11 起) (C++20 前)
template< class BidirIt, class Traits, class Alloc > bool operator>=( const std::sub_match<BidirIt>& sm, const std::basic_string< typename std::iterator_traits<BidirIt>::value_type, Traits,Alloc>& st ); | (13) | (C++11 起) (C++20 前)
template< class BidirIt, class Traits, class Alloc > /*comp-cat*/ operator<=>( const std::sub_match<BidirIt>& sm, const std::basic_string< typename std::iterator_traits<BidirIt>::value_type, Traits,Alloc>& st ); | (14) | (C++20 起)
`std::basic_string` 与 `std::sub_match` |  |
template< class BidirIt, class Traits, class Alloc > bool operator==( const std::basic_string< typename std::iterator_traits<BidirIt>::value_type, Traits,Alloc>& st, const std::sub_match<BidirIt>& sm ); | (15) | (C++11 起) (C++20 前)
template< class BidirIt, class Traits, class Alloc > bool operator!=( const std::basic_string< typename std::iterator_traits<BidirIt>::value_type, Traits,Alloc>& st, const std::sub_match<BidirIt>& sm ); | (16) | (C++11 起) (C++20 前)
template< class BidirIt, class Traits, class Alloc > bool operator<( const std::basic_string< typename std::iterator_traits<BidirIt>::value_type, Traits,Alloc>& st, const std::sub_match<BidirIt>& sm ); | (17) | (C++11 起) (C++20 前)
template< class BidirIt, class Traits, class Alloc > bool operator<=( const std::basic_string< typename std::iterator_traits<BidirIt>::value_type, Traits,Alloc>& st, const std::sub_match<BidirIt>& sm ); | (18) | (C++11 起) (C++20 前)
template< class BidirIt, class Traits, class Alloc > bool operator>( const std::basic_string< typename std::iterator_traits<BidirIt>::value_type, Traits,Alloc>& st, const std::sub_match<BidirIt>& sm ); | (19) | (C++11 起) (C++20 前)
template< class BidirIt, class Traits, class Alloc > bool operator>=( const std::basic_string< typename std::iterator_traits<BidirIt>::value_type, Traits,Alloc>& st, const std::sub_match<BidirIt>& sm ); | (20) | (C++11 起) (C++20 前)
`std::sub_match` 与 `std::iterator_traits<BidirIt>::value_type*` |  |
template< class BidirIt > bool operator==( const std::sub_match<BidirIt>& sm, const typename std::iterator_traits<BidirIt>::value_type* s ); | (21) | (C++11 起)
template< class BidirIt > bool operator!=( const std::sub_match<BidirIt>& sm, const typename std::iterator_traits<BidirIt>::value_type* s ); | (22) | (C++11 起) (C++20 前)
template< class BidirIt > bool operator<( const std::sub_match<BidirIt>& sm, const typename std::iterator_traits<BidirIt>::value_type* s ); | (23) | (C++11 起) (C++20 前)
template< class BidirIt > bool operator<=( const std::sub_match<BidirIt>& sm, const typename std::iterator_traits<BidirIt>::value_type* s ); | (24) | (C++11 起) (C++20 前)
template< class BidirIt > bool operator>( const std::sub_match<BidirIt>& sm, const typename std::iterator_traits<BidirIt>::value_type* s ); | (25) | (C++11 起) (C++20 前)
template< class BidirIt > bool operator>=( const std::sub_match<BidirIt>& sm, const typename std::iterator_traits<BidirIt>::value_type* s ); | (26) | (C++11 起) (C++20 前)
template< class BidirIt > /*comp-cat*/ operator<=>( const std::sub_match<BidirIt>& sm, const typename std::iterator_traits<BidirIt>::value_type* s ); | (27) | (C++20 起)
`std::iterator_traits<BidirIt>::value_type*` 与 `std::sub_match` |  |
template< class BidirIt > bool operator==( const typename std::iterator_traits<BidirIt>::value_type* s, const std::sub_match<BidirIt>& sm ); | (28) | (C++11 起) (C++20 前)
template< class BidirIt > bool operator!=( const typename std::iterator_traits<BidirIt>::value_type* s, const std::sub_match<BidirIt>& sm ); | (29) | (C++11 起) (C++20 前)
template< class BidirIt > bool operator<( const typename std::iterator_traits<BidirIt>::value_type* s, const std::sub_match<BidirIt>& sm ); | (30) | (C++11 起) (C++20 前)
template< class BidirIt > bool operator<=( const typename std::iterator_traits<BidirIt>::value_type* s, const std::sub_match<BidirIt>& sm ); | (31) | (C++11 起) (C++20 前)
template< class BidirIt > bool operator>( const typename std::iterator_traits<BidirIt>::value_type* s, const std::sub_match<BidirIt>& sm ); | (32) | (C++11 起) (C++20 前)
template< class BidirIt > bool operator>=( const typename std::iterator_traits<BidirIt>::value_type* s, const std::sub_match<BidirIt>& sm ); | (33) | (C++11 起) (C++20 前)
`std::sub_match` 与 `std::iterator_traits<BidirIt>::value_type` |  |
template< class BidirIt > bool operator==( const std::sub_match<BidirIt>& sm, const typename std::iterator_traits<BidirIt>::value_type& ch ); | (34) | (C++11 起)
template< class BidirIt > bool operator!=( const std::sub_match<BidirIt>& sm, const typename std::iterator_traits<BidirIt>::value_type& ch ); | (35) | (C++11 起) (C++20 前)
template< class BidirIt > bool operator<( const std::sub_match<BidirIt>& sm, const typename std::iterator_traits<BidirIt>::value_type& ch ); | (36) | (C++11 起) (C++20 前)
template< class BidirIt > bool operator<=( const std::sub_match<BidirIt>& sm, const typename std::iterator_traits<BidirIt>::value_type& ch ); | (37) | (C++11 起) (C++20 前)
template< class BidirIt > bool operator>( const std::sub_match<BidirIt>& sm, const typename std::iterator_traits<BidirIt>::value_type& ch ); | (38) | (C++11 起) (C++20 前)
template< class BidirIt > bool operator>=( const std::sub_match<BidirIt>& sm, const typename std::iterator_traits<BidirIt>::value_type& ch ); | (39) | (C++11 起) (C++20 前)
template< class BidirIt > /*comp-cat*/ operator<=>( const std::sub_match<BidirIt>& sm, const typename std::iterator_traits<BidirIt>::value_type& ch ); | (40) | (C++20 起)
`std::iterator_traits<BidirIt>::value_type` 与 `std::sub_match` |  |
template< class BidirIt > bool operator==( const typename std::iterator_traits<BidirIt>::value_type& ch, const std::sub_match<BidirIt>& sm ); | (41) | (C++11 起) (C++20 前)
template< class BidirIt > bool operator!=( const typename std::iterator_traits<BidirIt>::value_type& ch, const std::sub_match<BidirIt>& sm ); | (42) | (C++11 起) (C++20 前)
template< class BidirIt > bool operator<( const typename std::iterator_traits<BidirIt>::value_type& ch, const std::sub_match<BidirIt>& sm ); | (43) | (C++11 起) (C++20 前)
template< class BidirIt > bool operator<=( const typename std::iterator_traits<BidirIt>::value_type& ch, const std::sub_match<BidirIt>& sm ); | (44) | (C++11 起) (C++20 前)
template< class BidirIt > bool operator>( const typename std::iterator_traits<BidirIt>::value_type& ch, const std::sub_match<BidirIt>& sm ); | (45) | (C++11 起) (C++20 前)
template< class BidirIt > bool operator>=( const typename std::iterator_traits<BidirIt>::value_type& ch, const std::sub_match<BidirIt>& sm ); | (46) | (C++11 起) (C++20 前)

比较 `sub_match` 与另一 `sub_match` 、 string 、空终止字符序列或字符。

1-7) 通过直接比较其底层序列比较二个 sub_match 。如同以 lhs.compare(rhs) 实现。
8-20) 比较 sub_match 与 std::basic_string 。如同以 sm.compare(typename sub_match<BidirIt>::string_type(st.data(), st.size()) 实现。
21-33) 比较 sub_match 与空终止字符串。如同以 sm.compare(s) 实现。
34-46) 比较 sub_match 与字符。如同以 sm.compare(typename sub_match<BidirIt>::string_type(1, ch)) 实现。

三路比较运算符的结果类型（ /*comp-cat*/ ）是 std::compare_three_way_result_t<typename std::sub_match<BidirIt>::string_type>> ，即 std::char_traits<typename std::iterator_traits<BidirIt>::value_type>::comparison_category ，若该有限定标识合法并指代类型，否则为 std::weak_ordering 。若 /*comp-cat*/ 不是比较类别类型，则程序为非良构。 `<`、 `<=`、 `>`、 `>=` 及 `!=` 运算符分别从 `operator<=>` 与 `operator==` 合成。 | (C++20 起)

### 参数

lhs, rhs, sm | - | 要比较的 `sub_match`
st | - | 要比较的 `basic_string`
s | - | 指向要比较空终止字符串的指针
ch | - | 要比较的字符

### 返回值

对于 `operator==` ， (C++20 起)若以 std::sub_match::compare() 定义的对应关系成立则为 true ，否则为 false 。

对于 `operator<=>` 为 static_cast</*comp-cat*/>(/*comp-res*/ <=> 0) ，其中 /*comp-res*/ 是上述 std::sub_match::compare() 的结果。 | (C++20 起)

### 注解

若 `BidirIt` 的值类型为 char 、 wchar_t 、 char8_t 、 char16_t 或 char32_t ，则 `operator<=>` 的返回类型为 std::strong_ordering 。 | (C++20 起)

### 示例

| 本节未完成 原因：暂无示例

### 缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

DR | 应用于 | 出版时的行为 | 正确行为
--- | --- | --- | ---
LWG 3432 | C++20 | 未要求 `operator<=>` 的返回类型为比较类别类型 | 已要求

### 参阅

compare | 若存在则比较匹配的子序列 (公开成员函数)