8 #ifndef SIG_UTIL_SORT_HPP
9 #define SIG_UTIL_SORT_HPP
11 #include "../helper/type_traits.hpp"
12 #include "../functional/zip.hpp"
13 #include "../functional/rest.hpp"
41 template <
class F,
class C,
42 class CR =
typename impl::remove_const_reference<C>::type,
43 class T =
typename impl::sequence_container_traits<CR>::value_type,
44 typename std::enable_if<impl::has_random_access_iter<CR>::value>::type*& =
enabler
49 ) ->decltype(
impl::eval(std::forward<F>(binary_op), std::declval<T>(), std::declval<T>()),
void())
55 template <
class F,
class C,
56 class CR =
typename impl::remove_const_reference<C>::type,
57 class T =
typename impl::static_container_traits<CR>::value_type,
59 typename std::enable_if<impl::has_random_access_iter<CR>::value>::type*& =
enabler
64 ) ->decltype(
impl::eval(std::forward<F>(binary_op), std::declval<T>(), std::declval<T>()),
void())
70 template <
class F,
class C,
71 class CR =
typename impl::remove_const_reference<C>::type,
72 typename std::enable_if<!impl::has_random_access_iter<CR>::value>::type*& =
enabler,
73 class T =
typename impl::sequence_container_traits<CR>::value_type
78 ) ->decltype(
impl::eval(std::forward<F>(binary_op), std::declval<T>(), std::declval<T>()),
void())
80 container.sort(std::forward<F>(binary_op));
128 template <
class C,
class F,
129 class T =
typename impl::container_traits<typename impl::remove_const_reference<C>::type>::value_type
135 using Tp = std::tuple<T, uint>;
137 auto result =
zip(std::forward<C>(container),
seqn(0u, 1u, container.size()));
139 sort(result, [&](Tp
const& l, Tp
const& r){
return std::forward<F>(binary_op)(std::get<0>(l), std::get<0>(r)); });
141 return unzip(std::move(result));
auto end(C &&c) -> std::move_iterator< typename RC::iterator >
auto sort_with_index(C &&container, F &&binary_op)
ソート前の位置を保持してソート
auto sort(C &container, F &&binary_op) -> decltype(impl::eval(std::forward< F >(binary_op), std::declval< T >(), std::declval< T >()), void())
標準ソート関数のラッパ
auto zip(Cs &&...lists)
複数のコンテナから、タプルのコンテナを作る
auto unzip(CT &&list_tuple) -> R
タプルのコンテナから、指定したindexのコンテナを取り出す
auto eval(F &&f, Args &&...args) -> decltype(f(std::forward< Args >(args)...))
auto sort(C &container, F &&binary_op) -> decltype(impl::eval(std::forward< F >(binary_op), std::declval< T >(), std::declval< T >()), void())
C seqn(T1 st, T2 d, uint n)
等差数列
auto begin(C &&c) -> std::move_iterator< typename RC::iterator >