名前空間
変種
操作

std::strong_ordering

提供: cppreference.com
< cpp‎ | utility
 
 
 
ヘッダ <compare> で定義
class strong_ordering;
(C++20およびそれ以降)

クラス型 std::strong_ordering は以下のような三方比較の結果の型です。

  • 6つの関係演算子 (==, !=, <, <=, >, >=) をすべて使用できます。
  • 代用可能性を暗示します。 a が b と同等な場合、 f(a) も f(b) と同等です。 ただし f は引数のパブリック const メンバを通してアクセス可能な比較用の状態のみを読み込む関数を表します。 別の言い方をすると、同等な値は区別できません。
  • 比較できない値を許容しません。 a < b、 a == b、 a > b の少なくともひとつは true でなければなりません。

目次

[編集] 定数

std::strong_ordering はその型の const 静的データメンバとして実装される4つの有効な値を持ちます。

メンバ定数 定義
less(inline constexpr)
[static]
より小さい (前に順序付けされる) 関係を表す std::strong_ordering 型の有効な値
(パブリック静的メンバ定数)
equivalent(inline constexpr)
[static]
同等 (前にも後にも順序付けされない) を表す std::strong_ordering 型の有効な値
(パブリック静的メンバ定数)
equal(inline constexpr)
[static]
同等 (前にも後にも順序付けされない) を表す std::strong_ordering 型の有効な値
(パブリック静的メンバ定数)
greater(inline constexpr)
[static]
より大きい (後に順序付けされる) 関係を表す std::strong_ordering 型の有効な値
(パブリック静的メンバ定数)

[編集] 変換

std::strong_ordering は5つの比較カテゴリの最も強いものです。 他のいかなるカテゴリからも暗黙に変換することはできません。 他の4つのカテゴリ型に暗黙に変換することができます。

operator strong_equality
std::strong_equality への暗黙の変換
(パブリックメンバ関数)

std::strong_ordering::operator strong_equality

constexpr operator strong_equality() const noexcept;

戻り値

vequivalent または equal の場合は std::strong_equality::equalvless または greater の場合は std::strong_equality::nonequal

operator weak_equality
std::weak_equality への暗黙の変換
(パブリックメンバ関数)

std::strong_ordering::operator weak_equality

constexpr operator weak_equality() const noexcept;

戻り値

vequal または equivalent の場合は std::weak_equality::equivalentvless または greater の場合は std::weak_equality::nonequivalent

operator partial_ordering
std::partial_ordering への暗黙の変換
(パブリックメンバ関数)

std::strong_ordering::operator partial_ordering

constexpr operator partial_ordering() const noexcept;

戻り値

vless の場合は std::partial_ordering::lessvgreater の場合は std::partial_ordering::greatervequal または equivalent の場合は std::partial_ordering::equivalent

operator weak_ordering
std::weak_ordering への暗黙の変換
(パブリックメンバ関数)

std::strong_ordering::operator weak_ordering

constexpr operator weak_ordering() const noexcept;

戻り値

vless の場合は std::weak_ordering::lessvgreater の場合は std::weak_ordering::greatervequal または equivalent の場合は std::weak_ordering::equivalent

[編集] 比較

比較演算子はこの型の値とリテラル 0 との間で定義されます。 これは三方比較演算子の結果をブーリアンの関係に変換するために使用できる式 a <=> b == 0 または a <=> b < 0 をサポートします。 std::is_eqstd::is_lt などを参照してください。

strong_ordering を整数リテラル 0 以外の何らかの値と比較しようと試みるプログラムの動作は未定義です。

operator==operator!=operator<operator>operator<=operator>=operator<=>
ゼロと比較します
(関数)

operator==

friend constexpr bool operator==(strong_ordering v, /*unspecified*/ u) noexcept;
friend constexpr bool operator==(/*unspecified*/ u, strong_ordering v) noexcept;

引数

v - 調べる std::strong_ordering の値
u - リテラルのゼロを受理する任意の型の未使用な引数

戻り値

vequivalent または equal の場合は truevless または greater の場合は false

operator!=

friend constexpr bool operator!=(strong_ordering v, /*unspecified*/ u) noexcept;
friend constexpr bool operator!=(/*unspecified*/ u, strong_ordering v) noexcept;

引数

v - 調べる std::strong_ordering の値
u - リテラルのゼロを受理する任意の型の未使用な引数

戻り値

vless または greater の場合は truevequivalent または equal の場合は false

operator<

friend constexpr bool operator<(strong_ordering v, /*unspecified*/ u) noexcept;
(1)
friend constexpr bool operator<(/*unspecified*/ u, strong_ordering v) noexcept;
(2)

引数

v - 調べる std::strong_ordering の値
u - リテラルのゼロを受理する任意の型の未使用な引数

戻り値

1) vless の場合は truevgreaterequivalent または equal の場合は false
2) vgreater の場合は truevlessequivalent または equal の場合は false

operator<=

friend constexpr bool operator<=(strong_ordering v, /*unspecified*/ u) noexcept;
(1)
friend constexpr bool operator<=(/*unspecified*/ u, strong_ordering v) noexcept;
(2)

引数

v - 調べる std::strong_ordering の値
u - リテラルのゼロを受理する任意の型の未使用な引数

戻り値

1) vlessequivalent または equal の場合は truevgreater の場合は false
2) vgreaterequivalent または equal の場合は truevless の場合は false

operator>

friend constexpr bool operator>(strong_ordering v, /*unspecified*/ u) noexcept;
(1)
friend constexpr bool operator>(/*unspecified*/ u, strong_ordering v) noexcept;
(2)

引数

v - 調べる std::strong_ordering の値
u - リテラルのゼロを受理する任意の型の未使用な引数

戻り値

1) vgreater の場合は truevlessequivalent または equal の場合は false
2) vless の場合は truevgreaterequivalent または equal の場合は false

operator>=

friend constexpr bool operator>=(strong_ordering v, /*unspecified*/ u) noexcept;
(1)
friend constexpr bool operator>=(/*unspecified*/ u, strong_ordering v) noexcept;
(2)

引数

v - 調べる std::strong_ordering の値
u - リテラルのゼロを受理する任意の型の未使用な引数

戻り値

1) vgreaterequivalent または equal の場合は truevless の場合は false
2) vlessequivalent または equal の場合は truevgreater の場合は false

operator<=>

friend constexpr strong_ordering operator<=>(strong_ordering v, /*unspecified*/ u) noexcept;
(1)
friend constexpr strong_ordering  operator<=>(/*unspecified*/ u, strong_ordering v) noexcept;
(2)

引数

v - 調べる std::strong_ordering の値
u - リテラルのゼロを受理する任意の型の未使用な引数

戻り値

1) v
2) vless の場合は greatervgreater の場合は less、いずれでもなければ v

[編集]

[編集] 関連項目

6種類の演算子をすべてサポートする代用可能でない三方比較の結果の型
(クラス) [edit]
6種類の演算子をすべてサポートし、代用可能でなく、比較不可能な値を許容する、三方比較の結果の型
(クラス) [edit]
等しい、等しくないのみサポートする代用可能な三方比較の結果の型
(クラス) [edit]
等しい、等しくないのみサポートする代用可能でない三方比較の結果の型
(クラス) [edit]