32 template<
typename T,
typename FN>
33 bool contains(
const T& container, FN fn)
35 return std::any_of(container.begin(), container.end(), fn);
38 template<
typename T,
typename FN>
39 void sort(T& container, FN fn)
41 std::sort(container.begin(), container.end(), fn);
44 template<
typename T,
typename FN>
45 typename T::iterator find(T& container, FN fn)
47 return std::find_if(container.begin(), container.end(), fn);
50 template<
typename T,
typename FN>
51 typename T::const_iterator find(
const T& container, FN fn)
53 return std::find_if(container.begin(), container.end(), fn);
57 constexpr
typename std::add_const<T>::type& AsConst(T& t) {
61 template<
typename T,
typename FN>
62 int indexOf(
const T& container, FN fn) {
63 auto it = Algorithm::find(container, fn);
64 if(it == container.end())
68 return std::distance(container.begin(), it);
71 template<
class Container,
typename FN>
72 int count(
const Container& container, FN fn)
74 return std::count_if(container.begin(), container.end(), fn);
77 template<
class Container>
78 void remove_duplicates(Container& container)
80 for(
auto it=container.begin(); it != container.end(); it++)
84 std::remove(it + 1, container.end(), *it),
90 template<
class ContainerIn,
class ContainerOut,
typename FN>
91 void transform(
const ContainerIn& in, ContainerOut& out, FN fn)
93 std::transform(in.begin(), in.end(), std::back_inserter(out), fn);
96 template<
class ContainerInOut,
typename FN>
97 void transform(ContainerInOut& inout, FN fn)
99 std::transform(inout.cbegin(), inout.cend(), inout.begin(), fn);
102 template<
class ContainerIn,
class ContainerOut,
typename FN>
103 void copyIf(
const ContainerIn& in, ContainerOut& out, FN fn)
105 std::copy_if(in.begin(), in.end(), std::back_inserter(out), fn);
110 #endif // ALGORITHM_H