我们有简化的课程:
class A
{
bool val_;
public:
A() : val_(true) {}
bool isNew() const { return val_; }
void setDirty() { val_ = false; }
};
Run Code Online (Sandbox Code Playgroud)
以及这类对象的向量:
vector<A> coll;
coll.push_back(A());
coll.push_back(A());
coll.push_back(A());
coll.push_back(A());
coll[1].setDirty();
coll[3].setDirty();
Run Code Online (Sandbox Code Playgroud)
我需要一些优雅的解决方案来重新排列(排序)向量中的元素,以便未修改的对象将在序列的开头分组.
您可以使用标准库中的分区算法:
bool MyPredicate(A& a) { return a.isNew();}
...
// bound is iterator pointing to the first element for which predicate returns false
vector<A>::iterator bound = partition(coll.begin(), coll.end(), MyPredicate);
Run Code Online (Sandbox Code Playgroud)
或者,正如Christian Rau建议的解决方案没有单独的功能:
std::partition(coll.begin(), coll.end(), std::mem_fun_ref(&A::isNew))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |