从满足特定条件的std::列表中获取最小项 我正在寻找一种解决C++中的列表迭代/排序问题的函数方法。

从满足特定条件的std::列表中获取最小项 我正在寻找一种解决C++中的列表迭代/排序问题的函数方法。,c++,c++11,functional-programming,C++,C++11,Functional Programming,考虑以下类型的元素列表: struct SomeElement { /* ... functions and and additional data omitted ... */ int weight; } 存在std::list或事件std::vector。我想查询该列表以返回以下元素: 满足给定条件,即,MyPredicate(someElement)=true,以及 具有满足条件的所有对象的权重属性的最小值 我的列表有任意数量的元素,零到全部可能满足给定的条件 我通常知道

考虑以下类型的元素列表:

struct SomeElement
{
    /* ... functions and and additional data omitted ... */
    int weight;
}
存在
std::list
或事件
std::vector
。我想查询该列表以返回以下元素:

  • 满足给定条件,即,
    MyPredicate(someElement)=true
    ,以及
  • 具有满足条件的所有对象的
    权重
    属性的最小值
  • 我的列表有任意数量的元素,零到全部可能满足给定的条件

    我通常知道如何做,例如,我可以对列表进行排序,然后使用
    std::find_if
    ,选择满足条件的第一个对象,或者简单地使用
    for
    循环对其进行循环,等等。但是,我想用函数的方式解决这个问题

    < >我有没有办法在C++中使用列表谓词、生成器表达式和列表理解?我想写一些大致如下的内容:

    myList
        .where((SomeElement const& e) { MyPredicate(e); })
        .min([](SomeElement const& a, SomeElement const& b) { a.weight < b.weight; });
    
    myList
    .where((SomeElement const&e){MyPredicate(e);})
    .min([](某些元素常量和a,某些元素常量和b){a.weight

    是否可以使用C++的STL或Boost库?

    您谈论的是列表,但似乎是以树的形式查询结构(至少是这样)。“考虑列表…”与“属于已知父对象的所有对象”相比。请澄清。我认为有一个SomeElement的列表,SomeElement有一个指向对象的父元素,即“父元素”与列表无关。旁白:今天我第二次看到有人提议对容器进行排序,以便找到最小的元素。我完全被搞糊涂了。我想看看一个适当配置的
    min\u元素
    线性扫描怎么会做不到你想要的。除非问题是个谎言,在给定前提条件的情况下只找到最小元素不是实际问题。@WhozCraig同意。使用lambda,在对
    重量进行排序之前检查
    父项
    ,这应该是所需的全部。否则可能是OP想要的。