从向量中排序和提取元素

Jee*_*eva 0 c++ stl visual-c++

问题: 我有一个CPerson类,其成员变量是Age和Marks.我创建了一个人物矢量,并填充了这些物体.现在我想只提取得分为100分的人.

我的方法: 我尝试根据标记对矢量进行排序,然后在矢量中循环以找到100的第一个位置,然后再循环直到标记不同.这里的问题是我需要手动完成.Tommorow如果我想按年龄搜索,那么我需要重复相同的算法.还有其他办法吗?

我可以使用partial_sort_copy或upper_bound/lower_bound函数来实现它.

我正在使用VS2008

Don*_*eba 5

听起来你需要这个remove_copy_if功能,可以更好地命名为copy_if_not.不幸的copy_if是,STL缺少这个功能.

#include <vector>
#include <algorithm>
#include <iterator>
#include <iostream>
using namespace std;

typedef int CPerson;

bool HasNotScoredHundred(const CPerson & person)
{
    return person < 100;
}

void Print(const CPerson & person)
{
    cout << person << " ";
}

int main()
{
    vector<CPerson> people;
    people.push_back(CPerson(50));
    people.push_back(CPerson(150));
    people.push_back(CPerson(100));
    people.push_back(CPerson(0));

    vector<CPerson> elite;
    remove_copy_if
        ( people.begin()
        , people.end()
        , back_inserter(elite)
        , HasNotScoredHundred
        );

    for_each(people.begin(), people.end(), Print);
    cout << "\n";
    for_each(elite.begin(),  elite.end(),  Print);
}
Run Code Online (Sandbox Code Playgroud)

输出:

50 150 100 0
150 100
Run Code Online (Sandbox Code Playgroud)

当然,如果你想调整标记阈值,你可以使用函子代替HasNotScoredHundred函数.