- algorithm[meta header]
- std[meta namespace]
- function template[meta id-type]
namespace std {
template <class RandomAccessIterator>
void stable_sort(RandomAccessIterator first,
RandomAccessIterator last); // (1) C++03
template <class RandomAccessIterator, class Compare>
void stable_sort(RandomAccessIterator first,
RandomAccessIterator last,
Compare comp); // (2) C++03
template<class ExecutionPolicy, class RandomAccessIterator>
void stable_sort(ExecutionPolicy&& exec,
RandomAccessIterator first,
RandomAccessIterator last); // (3) C++17
template <class ExecutionPolicy, class RandomAccessIterator, class Compare>
void stable_sort(ExecutionPolicy&& exec,
RandomAccessIterator first,
RandomAccessIterator last,
Compare comp); // (4) C++17
}
範囲を安定ソートで並べ替える
RandomAccessIterator
は ValueSwappable
の要件を満たしている必要がある。*first
の型は MoveConstructible
と MoveAssignable
の要件を満たしている必要がある。
[first,last)
の範囲をソートする
なし
最大で N log^2(N) (N == last - first
)回の比較を行う。ただし、十分なメモリがあれば N log(N) になる。
同じ値が複数あった場合に、ソート前の位置関係が保たれる、「安定ソート」を行う。 一般的なマージソートで実装される。
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
std::vector<int> v = {3, 1, 4, 2, 5};
// 並べ替える
std::stable_sort(v.begin(), v.end());
std::for_each(v.begin(), v.end(), [](int x) {
std::cout << x << std::endl;
});
}
- std::stable_sort[color ff0000]
1
2
3
4
5