std:: stable_partition
|
ヘッダーで定義
<algorithm>
|
||
|
template
<
class
BidirIt,
class
UnaryPred
>
BidirIt stable_partition ( BidirIt first, BidirIt last, UnaryPred p ) ; |
(1) | (constexpr since C++26) |
|
template
<
class
ExecutionPolicy,
class
BidirIt,
class
UnaryPred
>
BidirIt stable_partition
(
ExecutionPolicy
&&
policy,
|
(2) | (since C++17) |
[
first
,
last
)
内の要素を、述語
p
が
true
を返すすべての要素が、述語
p
が
false
を返す要素の前に来るように並べ替える。要素の相対的な順序は保持される。
|
std:: is_execution_policy_v < std:: decay_t < ExecutionPolicy >> が true であること。 |
(C++20まで) |
|
std:: is_execution_policy_v < std:: remove_cvref_t < ExecutionPolicy >> が true であること。 |
(C++20以降) |
以下のいずれかの条件が満たされる場合、動作は未定義です:
|
(C++11以前) |
|
(C++11以降) |
目次 |
パラメータ
| first, last | - | 要素を並べ替える範囲を定義するイテレータのペア |
| policy | - | 使用する実行ポリシー |
| p | - |
要素が他の要素より前に順序付けられるべき場合に
true
を返す単項述語
式
p
(
v
)
は、
|
| 型要件 | ||
-
BidirIt
は
LegacyBidirectionalIterator
の要件を満たさなければならない
|
||
-
UnaryPred
は
Predicate
の要件を満たさなければならない
|
||
戻り値
2番目のグループの最初の要素へのイテレータ。
計算量
与えられた N を std:: distance ( first, last ) として:
例外
テンプレートパラメータ
ExecutionPolicy
を持つオーバーロードは、
以下のようにエラーを報告します:
-
アルゴリズムの一部として呼び出された関数の実行が例外をスローした場合、
ExecutionPolicyが 標準ポリシー のいずれかであるとき、 std::terminate が呼び出されます。その他のExecutionPolicyについては、動作は実装定義です。 - アルゴリズムがメモリの確保に失敗した場合、 std::bad_alloc がスローされます。
注記
この関数は一時バッファの割り当てを試みます。割り当てに失敗した場合、効率の低いアルゴリズムが選択されます。
libc++ および libstdc++ の実装では、拡張機能として LegacyForwardIterator s で示される範囲も受け入れます。
| 機能テスト マクロ | 値 | 標準 | 機能 |
|---|---|---|---|
__cpp_lib_constexpr_algorithms
|
202306L
|
(C++26) | constexpr 安定ソート ( 1 ) |
例
#include <algorithm> #include <iostream> #include <vector> int main() { std::vector<int> v{0, 0, 3, -1, 2, 4, 5, 0, 7}; std::stable_partition(v.begin(), v.end(), [](int n) { return n > 0; }); for (int n : v) std::cout << n << ' '; std::cout << '\n'; }
出力:
3 2 4 5 7 0 0 -1 0
欠陥報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 2150 | C++98 |
std::stable_partition
は条件を満たす1つの要素を
条件を満たさない1つの要素の前に配置する ことのみが要求されていた |
要件を修正 |
関連項目
|
要素の範囲を2つのグループに分割する
(関数テンプレート) |
|
|
(C++20)
|
要素の相対的な順序を保持しながら2つのグループに分割する
(アルゴリズム関数オブジェクト) |