Re: BinaryPredicate Question
 
In article <Xns98C4680FC6F84obrickermydejanewsco@216.196.97.136>, Otis
Bricker <obricker@my-dejanews.com> wrote:
I'm trying to figure out is the following technique is valid.
Given
std::vector<DataItem> cache;
which is sorted by the ID_ field of each DataItem.
And this Predicate class:
class IdLessThan: public std::binary_function<long, DataItem, bool>
{
public:
 bool operator()
             ( long lhs,  const DataItem& rhs)const{return lhs <
rhs.ID_;};
};
Is the following valid?
Vector<DataItem>::iterator it = 
       std::upper_bound(cache.begin(),cache.end(),ID, IdLessThan());
I ask because the compiler I am using is unable to compile the debug 
build of this. It seems to be trying to test the predicate by calling:
IdLessThan::operator()(const DataItem& lhs,long rhs);
Is this version required or is it just a case of a debug version 
requiring it for 'testing', which I believe can be disabled?
And would it be a good idea to include the extra form to allow the 
testing by the debug build?
Thanks.
since std::upper_bound requires a less than predicate [or operator < ()
for other version]  it uses this predicate to effectively test equality
and greater than by using the less than predicate.  x is equivalent to
y
as  !pred(x,y)&& !pred(y,x) == true.   x is greater than y  as
pred(y,x) == true. Similiar expressions to test  <= ,>= ,!= in terms of
<.  You need  both arguments, you don't need to inherit
from [directly or in effect] to use the predicate in algorithms in
<algorithm> so something like this:
struct lessThan
{
    bool operator () (const DataItem &x,const Data &y) const
    {
       // normal less than even if it just forwards to
       // DataItem::operator <
    }
    bool operator () (int x,const  DataItem &y) const
    {
       // ...
    }
    bool operator () (const DataItem &x,int x) const
    {
       // ...
    }
};
    Or add a [preferably explicit to help prevent accidents] ctor to
DataItem to take an int arg. and construct as little as needed for
lessThan to work.
-- 
      [ See http://www.gotw.ca/resources/clcm.htm for info about ]
      [ comp.lang.c++.moderated.    First time posters: Do this! ]