Namespaces
Variants

std::weak_order

ja.cppreference.net より
 
 
ユーティリティライブラリ
言語サポート
型サポート (基本型、RTTI)
ライブラリ機能テストマクロ (C++20)
プログラムユーティリティ
可変長引数関数
コルーチンサポート (C++20)
契約サポート (C++26)
三方比較
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

汎用ユーティリティ
関係演算子 (C++20で非推奨)
整数比較関数
(C++20)(C++20)(C++20)    
(C++20)
swap と 型操作
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
共通語彙型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
ヘッダ <compare>
inline namespace /* unspecified */ {
    inline constexpr /* unspecified */ weak_order = /* unspecified */;
}
で定義 (C++20 以上)
呼び出しシグネチャ
template< class T, class U >
    requires /* see below */
constexpr std::weak_ordering weak_order(T&& t, U&& u) noexcept(/* see below */);

三方比較を使用して2つの値を比較し、型 std::weak_ordering の結果を生成します。

t と u を式、T と U をそれぞれ decltype((t)) と decltype((u)) の型として、std::weak_order(t, u) は次の式と等価です:

  • std::is_same_v<std::decay_t<T>, std::decay_t<U>> が true の場合:
    • std::weak_ordering(weak_order(t, u))、ただし、これは well-formed な式であり、オーバーロード解決が std::weak_order の宣言を含まないコンテキストで行われる場合、
    • そうでなく、T が浮動小数点型の場合:
      • std::numeric_limits<T>::is_iec559 が true の場合、浮動小数点値の弱順序比較(以下を参照)を実行し、その結果を型 std::weak_ordering の値として返します。
      • それ以外の場合、std::weak_ordering の比較演算子で観測される順序と一致する型 T の値を生成します。
    • それ以外の場合、std::weak_ordering(std::compare_three_way()(t, u))(well-formed な場合)、
    • それ以外の場合、std::weak_ordering(std::strong_order(t, u))(well-formed な場合)。
  • その他のすべての場合、式は ill-formed となり、テンプレートの実体化の即時コンテキストに現れた場合に置換失敗を引き起こす可能性があります。

カスタマイゼーションポイントオブジェクト

名前 std::weak_order は カスタマイゼーションポイントオブジェクト を表し、これは 関数オブジェクト のconstな リテラル semiregular クラス型である。詳細は CustomizationPointObject を参照のこと。

IEEE浮動小数点型の厳密弱順序

x と y を同じIEEE浮動小数点型の値とし、 weak_order_less ( x, y ) を、C++標準で定義された厳密弱順序において x が y に先行するかどうかを示すブーリアン結果とする。

  • x と y のどちらもNaNでない場合、 weak_order_less ( x, y ) == true は x < y と同値である。すなわち、等しい浮動小数点値のすべての表現は等価である。
  • x が負のNaNであり、 y が負のNaNでない場合、 weak_order_less ( x, y ) == true である。
  • x が正のNaNでなく、 y が正のNaNである場合、 weak_order_less ( x, y ) == true である。
  • x と y の両方が同じ符号のNaNである場合、 ( weak_order_less ( x, y ) || weak_order_less ( y, x ) ) == false である。すなわち、同じ符号を持つすべてのNaNは等価である。

例

関連項目

すべての6つの演算子をサポートし、置換可能ではない3方向比較の結果型
(クラス)
3方向比較を実行し、型 std::strong_ordering の結果を生成する
(カスタマイゼーションポイントオブジェクト)
3方向比較を実行し、型 std::partial_ordering の結果を生成する
(カスタマイゼーションポイントオブジェクト)
3方向比較を実行し、型 std::weak_ordering の結果を生成する( operator <=> が利用できない場合でも)
(カスタマイゼーションポイントオブジェクト)