|
Boost : |
From: Gennadiy Rozental (gennadiy.rozental_at_[hidden])
Date: 2007-02-07 17:14:59
"Howard Hinnant" <howard.hinnant_at_[hidden]> wrote in message
news:D9D92951-17A4-4A29-9A0D-AD0B9E13FA64_at_twcny.rr.com...
> On Feb 2, 2007, at 10:36 AM, Thorsten Ottosen wrote:
>
>> David Abrahams wrote:
>>> Thorsten Ottosen <thorsten.ottosen_at_[hidden]> writes:
>>>
>>>
>>>> Hi,
>>>>
>>>> I couldn't find a way to do this. Maybe I have overlooked something.
>>>> Anyway, making sure that operator<, operator== does the right
>>>> thing is
>>>> pretty important.
>>>
>>>
>>> Strict weak ordering uses a single operations and does not relate two
>>> operations. Thus you can test that < imposes a strict weak ordering,
>>> but it can have nothing to do with ==. What you're testing below
>>> would need some other name.
>>
>> Right. I guess both could be useful.
>
> One approach is to use a debugging compare predicate which adapts
> another predicate and adds a test. Something like:
>
> template <class Compare>
> struct debug_comp
> {
> Compare comp_;
> debug_comp() {}
> explicit debug_comp(const Compare& c) : comp_(c) {}
>
> template <class Tp, class Up>
> bool operator()(const Tp& x, const Up& y)
> {
> bool r = comp_(x, y);
> if (r)
> assert(!comp_(y, x));
> return r;
> }
> };
>
> Demo:
>
> std::sort(v.begin(), v.end(), debug_comp<std::less<A> >());
SWO implies not only anti-symmetry. Did you take a look on
test_strict_weak_ordering in my post?
Gennadiy
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk