代码之家  ›  专栏  ›  技术社区  ›  DanDan

将remove_if转换为remove_not_if

  •  6
  • DanDan  · 技术社区  · 14 年前

    如何反转谓词的返回值,并删除返回false而不是true的元素?

    这是我的代码:

    headerList.remove_if(FindName(name));
    

    (请忽略缺少擦除)

    使用findname的简单函数:

    struct FindName
    {
        CString m_NameToFind;
    
        FindInspectionNames(const CString &nameToFind)
        {
            m_NameToFind = nameToFind;
        }
    
        bool operator()(const CHeader &header)
        {
            if(header.Name == m_NameToFind)
            {
                return true;
            }
    
            return false;
        }
    };
    

    我想要一些像:

    list.remove_if(FindName(name) == false);
    

    还没有使用C++0X,所以不允许LAMBDAS,可悲的是。我希望有比写notfindname函数更好的解决方案。

    3 回复  |  直到 12 年前
        1
  •  15
  •   DevSolar    12 年前

    not1 <functional>

    headerList.remove_if( std::not1( FindName( name ) ) );
    

    if(header.Name == m_NameToFind)
    {
        return true;
    }
    
    return false;
    

    return ( header.Name == m_NameToFind );
    

        2
  •  3
  •   denis    14 年前

    bool header_has_name (const CHeader& h, const CString& n) {return h.name == n;}
    
    headerList.remove_if (boost::bind (header_has_name, _1, "name"));
    

    headerList.remove_if (!boost::bind (header_has_name, _1, "name"));
    

        3
  •  0
  •   Timo Geusch    14 年前