namespace std {
// operator<=>により、以下の演算子が使用可能になる (C++20)
template <class BiIter>
bool operator>(
const sub_match<BiIter>& lhs,
const sub_match<BiIter>& rhs); // (1) C++11
template <class BiIter, class ST, class SA>
bool operator>(
const basic_string<
typename iterator_traits<BiIter>::value_type,
ST,
SA
>& lhs,
const sub_match<BiIter>& rhs); // (2) C++11
template <class BiIter, class ST, class SA>
bool operator>(
const sub_match<BiIter>& lhs,
const basic_string<
typename iterator_traits<BiIter>::value_type,
ST,
SA
>& rhs); // (3) C++11
template <class BiIter>
bool operator>(
const typename iterator_traits<BiIter>::value_type* lhs,
const sub_match<BiIter>& rhs); // (4) C++11
template <class BiIter>
bool operator>(
const sub_match<BiIter>& lhs,
const typename iterator_traits<BiIter>::value_type* rhs); // (5) C++11
template <class BiIter>
bool operator>(
const typename iterator_traits<BiIter>::value_type& lhs,
const sub_match<BiIter>& rhs); // (6) C++11
template <class BiIter>
bool operator>(
const sub_match<BiIter>& lhs,
const typename iterator_traits<BiIter>::value_type& rhs); // (7) C++11
}
概要
左辺が右辺より大きいか判定を行う。
戻り値
rhs < lhs
備考
- (1) の形式でもマッチした文字列のみが比較され、マッチした位置は考慮されない。(例を参照)
- (2)、および、(3) の形式でも比較に使用する文字特性クラスは標準の
char_traits<value_type>
が使用され、テンプレート引数に指定された文字特性クラスST
は考慮されない。
例
#include <iostream>
#include <regex>
#include <string>
int main()
{
const char ca[] = "abc abc";
const std::regex re(R"((\w+) (\w+))");
std::cmatch m;
if (std::regex_search(ca, m, re)) {
std::csub_match sub1 = m[1];
std::csub_match sub2 = m[2];
const std::string s1 = "abc";
const std::string s2 = "ABC";
std::cout << std::boolalpha
<< (sub1 > sub2 ) << std::endl // (1) の形式
<< (s1 > sub2 ) << std::endl // (2) の形式
<< (sub1 > s2 ) << std::endl // (3) の形式
<< ("ABC" > sub2 ) << std::endl // (4) の形式
<< (sub1 > "abc") << std::endl // (5) の形式
<< ('A' > sub2 ) << std::endl // (6) の形式
<< (sub1 > 'a' ) << std::endl; // (7) の形式
} else {
std::cout << "not match" << std::endl;
}
}
xxxxxxxxxx
#include <iostream>
#include <regex>
#include <string>
int main()
{
const char ca[] = "abc abc";
const std::regex re(R"((\w+) (\w+))");
std::cmatch m;
if (std::regex_search(ca, m, re)) {
std::csub_match sub1 = m[1];
std::csub_match sub2 = m[2];
const std::string s1 = "abc";
const std::string s2 = "ABC";
std::cout << std::boolalpha
<< (sub1 > sub2 ) << std::endl // (1) の形式
<< (s1 > sub2 ) << std::endl // (2) の形式
<< (sub1 > s2 ) << std::endl // (3) の形式
<< ("ABC" > sub2 ) << std::endl // (4) の形式
<< (sub1 > "abc") << std::endl // (5) の形式
<< ('A' > sub2 ) << std::endl // (6) の形式
<< (sub1 > 'a' ) << std::endl; // (7) の形式
} else {
std::cout << "not match" << std::endl;
}
}
出力
false
false
true
false
false
false
true
バージョン
言語
- C++11
処理系
- Clang: 3.0 ✅, 3.1 ✅, 3.2 ✅, 3.3 ✅, 3.4 ✅, 3.5 ✅, 3.6 ✅
- GCC: 4.9.0 ✅, 4.9.1 ✅, 5.0.0 ✅
- ICC: ??
- Visual C++: ??
参照
- P1614R2 The Mothership has Landed
- C++20での三方比較演算子の追加と、関連する演算子の自動導出