-----Original Message----- From: Boost [mailto:boost-bounces@lists.boost.org] On Behalf Of John Bytheway Sent: 03 October 2015 12:40 To: boost@lists.boost.org Subject: Re: [boost] Painting a bikeshed ...
On 2015-10-01 10:24, Marshall Clow wrote:
In Sean Parent's CppCon keynote last week, he went through the process of implementing an algorithm he called "sort_subrange", which takes four iterators describing two ranges, one a subset of the other, and sorts the subrange - as if you had sorted the entire range. (See https://www.youtube.com/watch?v=sWgDk-o-6ZE, starting at about 31:30).
I have implemented this in Boost.Algorithm (crediting Sean) - called partition_sort.
However, while I was doing this, I thought of a different algorithm; one that gathered all the elements into the subrange as if the entire range was sorted, but didn't actually do the sorting.
[...]
and, having done that, I immediately feel like it ought to be variadic and support arbitrarily many points to fix in sorted order
void partition_subrange ( Iterator first, Iterator... nth, Iterator last, Pred p)
or even
void partition_subrange ( Iterator first, Range<Iterator> nth, Iterator last, Pred p)
+1 You can loosen the requirements by not requiring all of the partitions to be subranges of a master range. void partion_ranges(Ranges... r) For instance three vectors {1, 4, 6} , {2, 5} and {3} could be partitioned to {1, 3, 2} , {5, 4} and {6}. Of course, the function does not need to have the word ranges in it. void partion (Ranges... r) And I still think stratify is more expressive...