【发布时间】:2011-05-23 07:00:18
【问题描述】:
假设我有一个 std::vector 对。如何有效地使用 std::find 方法来查看向量的至少一个元素是否不等于 (false, false)?
谢谢
【问题讨论】:
假设我有一个 std::vector 对。如何有效地使用 std::find 方法来查看向量的至少一个元素是否不等于 (false, false)?
谢谢
【问题讨论】:
std::pair 重载operator==,所以你可以用std::find 表示肯定:
bool b = std::find(v.begin(), v.end(), std::make_pair(false, false)) == v.end();
您可以使用std::find_if 表示否定:
bool b = std::find_if(v.begin(), v.end(),
std::bind2nd(std::not_equal_to<std::pair<bool, bool> >(),
std::make_pair(false, false)))
!= v.end();
第二个可以用 C++0x 写得更干净:
bool b = std::find_if(v.begin(), v.end(),
[](const std::pair<bool, bool> p) {
return p != std::make_pair(false, false);
}) != v.end();
【讨论】:
find_if 方法并对结果取反(如果没有元素等于(false,false),那么每个元素都必须等于(假的,假的))。此外,C++0x 添加了 all 和 any 算法(或类似的算法),使测试条件更加清晰。