【问题标题】:find conditions about vectors of pairs查找关于对向量的条件
【发布时间】:2011-05-23 07:00:18
【问题描述】:

假设我有一个 std::vector 对。如何有效地使用 std::find 方法来查看向量的至少一个元素是否不等于 (false, false)?

谢谢

【问题讨论】:

    标签: c++ vector find std-pair


    【解决方案1】:

    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();
    

    【讨论】:

    • 对不起,我的意思是说我需要检查所有元素是否都是(假,假)
    • @Banana:您可以使用find_if 方法并对结果取反(如果没有元素等于(false,false),那么每个元素都必须等于(假的,假的))。此外,C++0x 添加了 allany 算法(或类似的算法),使测试条件更加清晰。
    • 您的第二个解决方案解决了我的问题,但可能是您的第三个解决方案有错误。
    • 大约 10 个错误,我认为 stackoverflow 不允许我超过 comment.in stl_algo.h 的长度
    猜你喜欢
    • 2018-04-21
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2015-07-23
    • 1970-01-01
    • 2020-08-23
    • 1970-01-01
    • 2015-11-26
    相关资源
    最近更新 更多