partition(range, leftsubrange) or partition(range, rightsubrange)
Benji Smith
dlanguage at benjismith.net
Wed Sep 10 17:15:54 PDT 2008
Sean Kelly wrote:
> superdan wrote:
>> got a question on this range stuff. in stl partition is
>> partition(begin, mid, end). neat. in std.algorithm partition is
>> partition(range, mid). so-so. never like it mucho. in the new stuff
>> with ranges n all there are two choices partition(range, leftsubrange)
>> or partition(range, rightsubrange). question is, is there a better
>> choice between the two or are they just the same. would be cool to
>> have a clear rule with some advantage. and that's easy to remember too.
>>
>> like steve i think ranges are cool n all but fraid iterators are still
>> good at sumthin'. either-way choices ain't a good sign.
>
> To throw another version into the mix, Tango's partition routine is
> declared as partition(range, pred) and uses the result of pred to
> determine what to do with each element. In std.algorithm parlance, that
> would be equivalent to partition!("a < 5")(range), for example.
I was looking at that the other day, and it made me wonder...
Why does tango's partition use a bool predicate instead of an int
predicate (returning -1, 0, or 1 like opCmp does)?
Using the int predicate would enable a qsort routine that avoids
pointlessly swapping adjacent elements if they have equal values. It's
very handy for collections with lots of duplicate entries.
(Of course, then your partition value can't be a single
index/cursor/iterator/whatever. It has to be a range, but that's nicely
supported by the new design anyhow.)
--benji
More information about the Digitalmars-d-announce
mailing list