On 12/19/2012 08:19 PM, Andrei Alexandrescu wrote:
I find very useful and clean interface that provides SortedRange, but it
was disappointing that it have binarySearch to answer does it
.contains(value), but can't return the .indexOf(value). In my opinion it
should be part of the interface.
What to return if there are several indexes for a value? That's why the
more general lowerBound, upperBound, equalRange, and trisect are defined.
Ok, and what if value isn't in Range at all? How lowerBound, upperBound,
equalRange can help in such case?
auto a = assumeSorted([ 0, 1, 2, 3, 4, 5, 10, 11, 12, 14 ]);
auto p = a.lowerBound(7);
assert(equal(p, [0, 1, 2, 3, 4, 5]))
Sure I can do .contains(value) and then index is
.lowerBound(value).length but it's 2 searches where 1 could be enough.
And what if you need all indexes of equal elements? Then you should do 3
searches where 1 could be enough.