sal*_*oua 0 c++ struct stl vector
可能重复:
erase_if在哪里?
我的结构如下:
struct V {
int x;
int y;
}:
Run Code Online (Sandbox Code Playgroud)
我有一个结构元素的stl向量
vector<struct V> v1;
Run Code Online (Sandbox Code Playgroud)
我想从向量中删除属性y小于某个值的所有元素.
我怎么std::remove_if能通过定义与结构相关的谓词来做到这一点.
这是我定义的谓词,但似乎不正确.
struct less_than_value
{
const int value;
bool operator()(const struct V p) const
{
return p.y < value;
}
};
Run Code Online (Sandbox Code Playgroud)
您可以将erase-remove惯用法与合适的谓词一起使用:
bool my_predicate(const V& item)
{
// apply some logic and return true or false
return item.x == 42;
}
#include <algorithm>
std::vector<V> v1 = ....;
v1.erase( remove_if(v1.begin(), v1.end(), my_predicate), v1.end() );
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,x将删除数据成员等于42的所有元素.
编辑:看你的例子,你需要做类似的事情
less_than_value pred = {5};
v1.erase( remove_if(v1.begin(), v1.end(), pred), v1.end() );
Run Code Online (Sandbox Code Playgroud)
在 C++11 中,使用 lambda 就足够简单了:
v1.erase( std::remove_if( v1.begin(), v1.end(), [](V const& v) { return v.y<value; }),
v1.end());
Run Code Online (Sandbox Code Playgroud)
在 C++03 中,它有点复杂,可以通过多种方式之一完成:创建具有与上述 lambda 相同行为的函子;使用装订魔法(考虑boost::bind使用稍微简单的方法)。在这里使用装订魔法会很复杂,所以我会避免它。
| 归档时间: |
|
| 查看次数: |
6252 次 |
| 最近记录: |