@specsoftdev live:.cid.8e17e9b93cabb607 specsoftdev@gmail.com
std::stable_sort
Актуально для C++23.

#include <algorithm>
Актуально на 2024-03-13.



Define overload #1
template<class RandomAccessIterator>
void stable_sort(RandomAccessIterator first, RandomAccessIterator last);

Сортирует диапазон [first, last] в порядке возрастания так, что сохраняется порядок следования эквивалентных элементов.
Example, possible implementation
Define overload #2
template<class ExecutionPolicy, class RandomAccessIterator>
void stable_sort(ExecutionPolicy&& exec, RandomAccessIterator first,
                 RandomAccessIterator last);

TODO
Example, possible implementation
Define overload #3
template<class RandomAccessIterator, class Compare>
void stable_sort(RandomAccessIterator first, RandomAccessIterator last,
                 Compare comp);

Сортирует диапазон [first, last] при помощи бинарного предика "comp" так, что сохраняется порядок следования эквивалентных элементов.
Example, possible implementation
Define overload #4
template<class ExecutionPolicy, class RandomAccessIterator, class Compare>
void stable_sort(ExecutionPolicy&& exec, RandomAccessIterator first,
                 RandomAccessIterator last, Compare comp);

TODO
Example, possible implementation

Examples


Example 1:
#include <iostream>
#include <algorithm>
#include <vector>

int main()
{
    struct S {
        int id;
        std::string brand;
        bool operator < (S const& rhs) const {
            return id < rhs.id;
        }
    };

    std::vector<S> vec = {
        {3, "Lexus"},
        {3, "Toyota"},
        {1, "BMW"},
        {2, "Renault"}
    };

    std::stable_sort(std::begin(vec), std::end(vec));
    for (std::size_t i = 0; i < vec.size(); ++i)
    {
        std::cout  << vec[i].id << ' ' << vec[i].brand << std::endl;
    }
    return 0;
}

1 BMW
2 Renault
3 Lexus
3 Toyota



Changelog

C++26
TODO
C++23
TODO
C++20
TODO
C++17
TODO
C++14
TODO
C++11
TODO


See also

TODO

This page was last modified on 2024-03-13