Namespaces
Variants

std::hive<T,Allocator>::sort

ja.cppreference.net より
 
 
 
 
template< class Compare = std::less<T> >
void sort( Compare comp = Compare() );
(C++26 以降)

要素をソートします。メモリ確保が行われる可能性があります。要素の比較には comp を使用します。等価な要素の順序は保持されません。

コンテナ *this 内の要素を指す参照、ポインタ、イテレータ、および終端イテレータは無効化される可能性があります。

T は MoveInsertable(hive へのムーブ挿入可能)、MoveAssignable(ムーブ代入可能)、および Swappable(swap 可能)である必要があります。そうでない場合、動作は未定義です。

引数

comp - 比較関数オブジェクト(つまり、Compare の要件を満たすオブジェクト)。第一引数が第二引数よりtrue小さい(つまり、順序的に前にある)場合に ​ を返します。

比較関数のシグネチャは以下と同等であるべきです:

bool cmp(const Type1& a, const Type2& b);

シグネチャに const& が含まれている必要はありませんが、関数は渡されたオブジェクトを変更してはならず、型(const の可能性もある)Type1 および Type2 のすべての値を値カテゴリに関係なく受理できなければなりません(したがって、Type1& は許可されません。また、Type1 は、Type1 ムーブがコピーと等価である場合を除き(C++11 以降)許可されません)。
型 Type1 および Type2 は、型 <T,Allocator>::const_iterator のオブジェクトをデリファレンスして、暗黙的にその両方に変換できるものでなければなりません。 ​

型要件
-
Compare は Compare の要件を満たさなければなりません。

計算量

N·log(N) 回の comp の適用。ここで N は size() です。

例外

例外が投げられた場合、コンテナ *this 内の要素の順序は未規定です。

注意

std::sort および ranges::sort はランダムアクセスイテレータを必要とするため、hive では使用できません。

例

#include <hive>
#include <functional>
#include <print>

int main()
{
    std::hive<int> hive{3, 1, 4, 1, 5, 9, 2, 6, 5};
    std::println("Initially:  {}", hive);

    hive.sort();
    std::println("Ascending:  {}", hive);

    hive.sort(std::greater<int>());
    std::println("Descending: {}", hive);
}

出力:

Initially:  [3, 1, 4, 1, 5, 9, 2, 6, 5]
Ascending:  [1, 1, 2, 3, 4, 5, 5, 6, 9]
Descending: [9, 6, 5, 5, 4, 3, 2, 1, 1]

関連項目

連続した重複要素を削除する
(パブリックメンバ関数)