⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 algorithm.hpp

📁 CGAL is a collaborative effort of several sites in Europe and Israel. The goal is to make the most i
💻 HPP
📖 第 1 页 / 共 2 页
字号:
  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 + -