Boost logo

Boost :

From: Rob Stewart (stewart_at_[hidden])
Date: 2005-08-01 15:38:51


What does the following expression mean?

   all_of(x) != any_of(y)

1) It could mean that each of the values in x must not be equal
to any one of the values in y.

OTOH, should that expression be symmetrical?

   any_of(y) != all_of(x)

2) When expressed that way, it suggests that as long as any of
the values in y is not equal to all of the values in x, the
result is true.

That is, given the following sets of values

   s1 = { 1, 2, 3 }
   s2 = { 3, 4, 5 }

what should be the value of this expression?

   all_of(s1) != any_of(s2)

Intuitively, that seems to suggest 1), which means it evaluates
to false.

When reversed

   any_of(s2) != all_of(s1)

the expression seems to suggest 2), which means it evaluates to
true.

I don't like the idea of these expressions being asymmetrical.

Perhaps we need each_of to mean each value should be compared
against the other side and, provided all of those comparisons
succeed, the expression evaluates to true.

Then, all_of can mean that all of the values must satisfy the
*same* comparison. Put another way, all_of(x) op any_of(y) must
be implemented by iterating y and comparing against all_of(x).

With those two types, and given s1 and s2 from above, we'd have
the following expressions evaluate to true:

   all_of(s1) != any_of(s2)
   !(each_of(s1) != any_of(s2))

-- 
Rob Stewart                           stewart_at_[hidden]
Software Engineer                     http://www.sig.com
Susquehanna International Group, LLP  using std::disclaimer;

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk