std::forward_list sort() method
- since C++11
// (1) Non const version only
void sort();
// (2) Non const version only
template< class Compare >
void sort( Compare comp );
Sorts the elements in ascending order.
The order of equal elements is preserved.
- (1) Uses
operator<
to compare the elements. - (2) Uses the given comparison function
comp
.
If an exception is thrown, the order of elements in *this
is unspecified.
Parameters
-
comp
- comparison function object which returnstrue
if the first argument is less than the second.The signature of the predicate function should be equivalent to the following:
bool cmp( const Type1& a, const Type2& b )
While the signature does not need to have
const&
, the function must not modify the objects passed to it and must be able to accept all values of type (possibly const)Type1
andType2
regardless of value category (thus,Type1&
is not allowed , nor isType1
unless forType1
a move is equivalent to a copy (since C++11)).The types
Type1
andType2
must be such that an object of typeforward_list<T, Allocator>::const_iterator
can be dereferenced and then implicitly converted to both of them.
Return value
(none)
Complexity
Approximately N log N
comparisons, where N
is the number of elements in the list.
Exceptions
(none)
Notes
std::sort
requires RandomAccessIterator
s and so cannot be used with forward_list
.
This function also differs from std::sort
in that it does not require the element type of the forward_list
to be Swappable
, preserves the values of all iterators, and performs a stable sort.
Example
#include <iostream>
#include <functional>
#include <forward_list>
std::ostream& operator<<(std::ostream& ostr, const std::forward_list<int>& list)
{
for (auto &i : list) {
ostr << " " << i;
}
return ostr;
}
int main()
{
std::forward_list<int> list = { 8,7,5,9,0,1,3,2,6,4 };
std::cout << "before: " << list << "\n";
list.sort();
std::cout << "ascending: " << list << "\n";
list.sort(std::greater<int>());
std::cout << "descending: " << list << "\n";
}
before: 8 7 5 9 0 1 3 2 6 4
ascending: 0 1 2 3 4 5 6 7 8 9
descending: 9 8 7 6 5 4 3 2 1 0
Hover to see the original license.