40#ifndef GEOGRAM_BASIC_ALGORITHM
41#define GEOGRAM_BASIC_ALGORITHM
47#ifdef GEO_PARALLEL_STL
83 template <
typename ITERATOR>
85 const ITERATOR& begin,
const ITERATOR& end
87#ifdef GEO_PARALLEL_STL
89 std::sort(std::execution::par, begin, end);
93 std::sort(begin, end);
116 template <
typename ITERATOR,
typename CMP>
118 const ITERATOR& begin,
const ITERATOR& end,
const CMP& cmp
120#ifdef GEO_PARALLEL_STL
122 std::sort(std::execution::par, begin, end, cmp);
126 std::sort(begin, end, cmp);
136 std::sort(v.begin(), v.end());
141 std::unique(v.begin(), v.end()), v.end()
151 template <
typename ITERATOR>
inline void sort_3(ITERATOR items) {
152 if (items[0]> items[1]) {
153 std::swap(items[0], items[1]);
155 if (items[1]> items[2]) {
156 std::swap(items[1], items[2]);
158 if (items[0]> items[1]) {
159 std::swap(items[0], items[1]);
169 template <
typename ITERATOR>
inline void sort_4(ITERATOR items) {
170 if (items[1] < items[0]) {
171 std::swap(items[0], items[1]);
173 if (items[3] < items[2]) {
174 std::swap(items[2], items[3]);
176 if (items[2] < items[0]) {
177 std::swap(items[0], items[2]);
178 std::swap(items[1], items[3]);
180 if (items[2] < items[1]) {
181 std::swap(items[1], items[2]);
183 if (items[3] < items[2]) {
184 std::swap(items[2], items[3]);
195 template <
typename ITERATOR>
197 const ITERATOR& begin,
const ITERATOR& end
199 std::random_device rng;
200 std::mt19937 urng(rng());
201 std::shuffle(begin, end, urng);
Common include file, providing basic definitions. Should be included before anything else by all head...
Global Vorpaline namespace.
void sort_unique(VECTOR &v)
Sorts a vector and suppresses all duplicated elements.
void sort_4(ITERATOR items)
Specialized sort routine for 4 elements.
void sort(const ITERATOR &begin, const ITERATOR &end)
Sorts elements in parallel.
bool uses_parallel_algorithm(size_t size=0)
Checks whether parallel algorithms are used.
void sort_3(ITERATOR items)
Specialized sort routine for 3 elements.
void random_shuffle(const ITERATOR &begin, const ITERATOR &end)
Applies a random permutation to a sequence.