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