Re: BinaryPredicate Question
Daniel T. wrote:
Otis Bricker <obricker@my-dejanews.com> wrote:
But I am a bit surprised that some have said that the version
operator()(const DataItem&,long) is the one that is needed, though I
might have misunderstood the comments. The couple of compilers I had
tried all worked with the operator()(long,const DataItem&). I tried
something else and found that for lower_bound my current compiler does
seem to want (const DI&,long). I can understand this.
If the test was simply std::less<DataItem>, I would have expected the
upper_bound to be calling less::operator()(myvalue,testValue) and the
first point that passed( or the end of range) would be the result. With
lower_bound and less, I would expect it to be testing
not(less::operator()(testValue,myValue)) and terminating the same way.
Of course, I imagine that it could be implemented in other ways. Or I
could just have my head on backwards today.
Your logic is correct. Upper and lower range functions need to be able
to work with forward interators so they must start at the beginning of
the range and progress from there. There really is no reason to have a
op() for going the other way in the container.
The specification says that they may make at most log n
comparisons, which isn't possible if they simply progress
linearly through the container. (I presume that the versions
for forward iterators make heavy use of std::advance and
std::distance. To be frank, I was rather surprised that they
were even supported.)
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orient?e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S?mard, 78210 St.-Cyr-l'?cole, France, +33 (0)1 30 23 00 34
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]