Pete Becker
9/30/2008 10:59:00 AM
On 2008-09-30 05:16:36 -0400, James Kanze <james.kanze@gmail.com> said:
> On Sep 29, 9:51 pm, Pete Becker <p...@versatilecoding.com> wrote:
>> On 2008-09-29 13:45:24 -0400, Juha Nieminen <nos...@thanks.invalid> said:
>>> Xiaobin Huang wrote:
>>>> you can provide your own predicate.
>
>>>> class cmp {
>>>> public:
>>>> cmp(...) {
>>>> // init thePoint_
>>>> }
>>>> bool operator() (point const& lh, point const& rh) {
>>>> // ...
>>>> }
>>>> private:
>>>> point thePoint_;
>>>> };
>
>>> Nitpicking, but isn't that called a comparator? If is it
>>> *also* a predicate?
>
>> There is a version of std::sort that takes a predicate. It
>> doesn't care whether you call it a comparator, a functoid, or
>> fred. But when you're talking about std::sort, if you refer to
>> a predicate by some other name, you run the risk of confusing
>> your listener.
>
> While it's obviously a predicate; any functional object which
> returns bool is a predicate. The standard never uses the word
> predicate for it, however, and calls it Compare. It also
> imposes a number of additional constraints on it which don't
> apply to predicates in general. In fact, it even says that "A
> sequence is sorted with respect to a comparator comp if [...]",
> using the very same word as Juha. So while it is a predicate,
> I'd consider "comparator" a more precise word. (All comparators
> are predicates, but not all predicates are comparators. And
> here, we need a predicate which is a comparator.)
You're right, of course. Sorting and partitioning rely on comparators
(which take two arguments), and most other algorithms rely on
predicates (which take one argument). I should know better than to post
while I'm in the middle of post-meeting editing.
--
Pete
Roundhouse Consulting, Ltd. (www.versatilecoding.com) Author of "The
Standard C++ Library Extensions: a Tutorial and Reference
(www.petebecker.com/tr1book)