📄 algorithm.hpp
字号:
struct sig { typedef void type; }; template <class A> void operator()(A a, A b) const { ::std::random_shuffle(a, b); } template <class A, class C> void operator()(A a, A b, const C& c) const { ::std::random_shuffle(a, b, c); }};// partition ---------------------------------struct partition { template <class Args> struct sig { typedef typename boost::remove_const< typename boost::tuples::element<1, Args>::type >::type type; }; template <class A, class C> A operator()(A a, A b, C c) const { return ::std::partition(a, b, c); }};// stable_partition ---------------------------------struct stable_partition { template <class Args> struct sig { typedef typename boost::remove_const< typename boost::tuples::element<1, Args>::type >::type type; }; template <class A, class C> A operator()(A a, A b, C c) const { return ::std::stable_partition(a, b, c); }};// sort ---------------------------------struct sort { template <class Args> struct sig { typedef void type; }; template <class A> void operator()(A a, A b) const { ::std::sort(a, b); } template <class A, class C> void operator()(A a, A b, C c) const { ::std::sort(a, b, c); }};// stable_sort ---------------------------------struct stable_sort { template <class Args> struct sig { typedef void type; }; template <class A> void operator()(A a, A b) const { ::std::stable_sort(a, b); } template <class A, class C> void operator()(A a, A b, C c) const { ::std::stable_sort(a, b, c); }};// partial_sort ---------------------------------struct partial_sort { template <class Args> struct sig { typedef void type; }; template <class A> void operator()(A a, A b, A c) const { ::std::partial_sort(a, b, c); } template <class A, class D> void operator()(A a, A b, A c, D d) const { ::std::partial_sort(a, b, c, d); }};// partial_sort_copy ---------------------------------struct partial_sort_copy { template <class Args> struct sig { typedef typename boost::remove_const< typename boost::tuples::element<3, Args>::type >::type type; }; template <class A, class C> C operator()(A a, A b, C c, C d) const { return ::std::partial_sort_copy(a, b, c, d); } template <class A, class C, class E > C operator()(A a, A b, C c, C d, E e) const { return ::std::partial_sort_copy(a, b, c, d, e); }};// nth_element ---------------------------------struct nth_element { template <class Args> struct sig { typedef void type; }; template <class A> void operator()(A a, A b, A c) const { ::std::nth_element(a, b, c); } template <class A, class D> void operator()(A a, A b, A c, D d) const { ::std::nth_element(a, b, c, d); }};// lower_bound ---------------------------------struct lower_bound { template <class Args> struct sig { typedef typename boost::remove_const< typename boost::tuples::element<1, Args>::type >::type type; }; template <class A, class C> A operator()(A a, A b, const C& c) const { return ::std::lower_bound(a, b, c); } template <class A, class C, class D> A operator()(A a, A b, const C& c, D d) const { return ::std::lower_bound(a, b, c, d); }};// upper_bound ---------------------------------struct upper_bound { template <class Args> struct sig { typedef typename boost::remove_const< typename boost::tuples::element<1, Args>::type >::type type; }; template <class A, class C> A operator()(A a, A b, const C& c) const { return ::std::upper_bound(a, b, c); } template <class A, class C, class D> A operator()(A a, A b, const C& c, D d) const { return ::std::upper_bound(a, b, c, d); }};// equal_range ---------------------------------struct equal_range { template <class Args> struct sig { typedef typename boost::remove_const< typename boost::tuples::element<1, Args>::type >::type element_type; typedef ::std::pair< element_type, element_type > type; }; template <class A, class C> ::std::pair<A,A> operator()(A a, A b, const C& c) const { return ::std::equal_range(a, b, c); } template <class A, class C, class D> ::std::pair<A,A> operator()(A a, A b, const C& c, D d) const { return ::std::equal_range(a, b, c, d); }};// binary_search ---------------------------------struct binary_search { template <class Args> struct sig { typedef bool type; }; template <class A, class C > bool operator()(A a, A b, const C& c) const { return ::std::binary_search(a, b, c); } template <class A, class C, class D> bool operator()(A a, A b, const C& c, D d) const { return ::std::binary_search(a, b, c, d); }};// merge --------------------------------struct merge { template <class Args> struct sig { typedef typename boost::remove_const< typename boost::tuples::element<5, Args>::type >::type type; }; template <class A, class C, class E> E operator()(A a, A b, C c, C d, E e) const { return std::merge(a, b, c, d, e);} template <class A, class C, class E, class F> E operator()(A a, A b, C c, C d, E e, F f) const { return std::merge(a, b, c, d, e, f);}};// inplace_merge ---------------------------------struct inplace_merge { template <class Args> struct sig { typedef void type; }; template <class A> void operator()(A a, A b, A c) const { ::std::inplace_merge(a, b, c); } template <class A, class D> void operator()(A a, A b, A c, D d) const { ::std::inplace_merge(a, b, c, d); }};// includes ---------------------------------struct includes { template <class Args> struct sig { typedef bool type; }; template <class A, class C> bool operator()(A a, A b, C c, C d) const { return ::std::includes(a, b, c, d); } template <class A, class C, class E> bool operator()(A a, A b, C c, C d, E e) const { return ::std::includes(a, b, c, d, e); }};// set_union --------------------------------struct set_union { template <class Args> struct sig { typedef typename boost::remove_const< typename boost::tuples::element<5, Args>::type >::type type; }; template <class A, class C, class E> E operator()(A a, A b, C c, C d, E e) const { return std::set_union(a, b, c, d, e);} template <class A, class C, class E, class F> E operator()(A a, A b, C c, C d, E e, F f) const { return std::set_union(a, b, c, d, e, f);}};// set_intersection --------------------------------struct set_intersection { template <class Args> struct sig { typedef typename boost::remove_const< typename boost::tuples::element<5, Args>::type >::type type; }; template <class A, class C, class E> E operator()(A a, A b, C c, C d, E e) const { return std::set_intersection(a, b, c, d, e);} template <class A, class C, class E, class F> E operator()(A a, A b, C c, C d, E e, F f) const { return std::set_intersection(a, b, c, d, e, f);}};// set_difference --------------------------------struct set_difference { template <class Args> struct sig { typedef typename boost::remove_const< typename boost::tuples::element<5, Args>::type >::type type; }; template <class A, class C, class E> E operator()(A a, A b, C c, C d, E e) const { return std::set_difference(a, b, c, d, e);} template <class A, class C, class E, class F> E operator()(A a, A b, C c, C d, E e, F f) const { return std::set_difference(a, b, c, d, e, f);}};// set_symmetric_difference --------------------------------struct set_symmetric_difference { template <class Args> struct sig { typedef typename boost::remove_const< typename boost::tuples::element<5, Args>::type >::type type; }; template <class A, class C, class E> E operator()(A a, A b, C c, C d, E e) const { return std::set_symmetric_difference(a, b, c, d, e);} template <class A, class C, class E, class F> E operator()(A a, A b, C c, C d, E e, F f) const { return std::set_symmetric_difference(a, b, c, d, e, f);}};// push_heap ---------------------------------struct push_heap { template <class Args> struct sig { typedef void type; }; template <class A> void operator()(A a, A b) const { ::std::push_heap(a, b); } template <class A, class C> void operator()(A a, A b, C c) const { ::std::push_heap(a, b, c); }};// pop_heap ---------------------------------struct pop_heap { template <class Args> struct sig { typedef void type; }; template <class A> void operator()(A a, A b) const { ::std::pop_heap(a, b); } template <class A, class C> void operator()(A a, A b, C c) const { ::std::pop_heap(a, b, c); }};// make_heap ---------------------------------struct make_heap { template <class Args> struct sig { typedef void type; }; template <class A> void operator()(A a, A b) const { ::std::make_heap(a, b); } template <class A, class C> void operator()(A a, A b, C c) const { ::std::make_heap(a, b, c); }};// sort_heap ---------------------------------struct sort_heap { template <class Args> struct sig { typedef void type; }; template <class A> void operator()(A a, A b) const { ::std::sort_heap(a, b); } template <class A, class C> void operator()(A a, A b, C c) const { ::std::sort_heap(a, b, c); }};// min ---------------------------------struct min { template <class Args> struct sig { typedef typename boost::remove_const< typename boost::tuples::element<1, Args>::type >::type type; }; template <class A> A operator()(const A& a, const A& b) const { return (::std::min)(a, b); } template <class A, class C> A operator()(const A& a, const A& b, C c) const { return (::std::min)(a, b, c); }};// max ---------------------------------struct max { template <class Args> struct sig { typedef typename boost::remove_const< typename boost::tuples::element<1, Args>::type >::type type; }; template <class A> A operator()(const A& a, const A& b) const { return (::std::max)(a, b); } template <class A, class C> A operator()(const A& a, const A& b, C c) const { return (::std::max)(a, b, c); }};struct min_element { template <class Args> struct sig { typedef typename boost::remove_const< typename boost::tuples::element<1, Args>::type >::type type; }; template <class A> A operator()(A a, A b) const { return ::std::min_element(a, b); } template <class A, class C> A operator()(A a, A b, C c) const { return ::std::min_element(a, b, c); }};// max_element ---------------------------------struct max_element { template <class Args> struct sig { typedef typename boost::remove_const< typename boost::tuples::element<1, Args>::type >::type type; }; template <class A> A operator()(A a, A b) const { return ::std::max_element(a, b); } template <class A, class C> A operator()(A a, A b, C c) const { return ::std::max_element(a, b, c); }};// lexicographical_compare ---------------------------------struct lexicographical_compare { template <class Args> struct sig { typedef bool type; }; template <class A, class C> bool operator()(A a, A b, C c, C d) const { return ::std::lexicographical_compare(a, b, c, d); } template <class A, class C, class E> bool operator()(A a, A b, C c, C d, E e) const { return ::std::lexicographical_compare(a, b, c, d, e); }};// next_permutation ---------------------------------struct next_permutation { template <class Args> struct sig { typedef bool type; }; template <class A> bool operator()(A a, A b) const { return ::std::next_permutation(a, b); } template <class A, class C > bool operator()(A a, A b, C c) const { return ::std::next_permutation(a, b, c); }};// prev_permutation ---------------------------------struct prev_permutation { template <class Args> struct sig { typedef bool type; }; template <class A> bool operator()(A a, A b) const { return ::std::prev_permutation(a, b); } template <class A, class C > bool operator()(A a, A b, C c) const { return ::std::prev_permutation(a, b, c); }};} // end of ll namespace// There is no good way to call an overloaded member function in a // lambda expression. // The macro below defines a function object class for calling a// const_iterator returning member function of a container.#define CALL_MEMBER(X) \struct call_##X { \template <class Args> \ struct sig { \ typedef typename boost::remove_const< \ typename boost::tuples::element<1, Args>::type \ >::type::const_iterator type; \ }; \ \ template<class T> \ typename T::const_iterator \ operator()(const T& t) const \ { \ return t.X(); \ } \};// create call_begin and call_end classesCALL_MEMBER(begin)CALL_MEMBER(end)#undef CALL_MEMBER} // end of lambda namespace} // end of boost namespace#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -