algo/sort: add explicit index sorting routine
This commit is contained in:
parent
483c43c732
commit
dee4a155e3
@ -89,6 +89,27 @@ namespace cruft::sort {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
/// Fill a supplied index buffer with a sorted range of indices over an
|
||||
/// identically size collection of data elements addressed by the
|
||||
/// RandomIterator `data`.
|
||||
///
|
||||
/// Does not modify any data element pointed to by `data`.
|
||||
template <typename IndexT, typename RandomT>
|
||||
void
|
||||
indices (IndexT idx_first, IndexT idx_last, RandomT data)
|
||||
{
|
||||
// initialise a monotonic sequence of indices
|
||||
std::iota (idx_first, idx_last, 0);
|
||||
|
||||
// sort using the indices
|
||||
std::sort (idx_first, idx_last, [&] (auto a, auto b) {
|
||||
return *(data + a) < *(data + b);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// sort an array specified by the iterators key_first:key_last using a
|
||||
// comparator, and optionally a series of additional value iterators
|
||||
|
Loading…
Reference in New Issue
Block a user