gpt4 book ai didi

c++ - 从 vector 中排序和提取元素

转载 作者:太空宇宙 更新时间:2023-11-04 16:31:03 25 4
gpt4 key购买 nike

问题:我有一个 CPerson 类,其成员变量是 Age 和 Marks。我创建了一个人 vector 并填充了对象。现在我只想提取得分为 100 分的人。

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

我可以使用 partial_sort_copy 或 upper_bound/lower_bound 函数来实现吗?

我正在使用 VS2008

最佳答案

听起来您需要 remove_copy_if 函数,最好将其命名为 copy_if_not。不幸的是,STL 中缺少 copy_if 函数。

#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);
}

输出:

50 150 100 0
150 100

当然,如果您想调整标记阈值,您可以使用仿函数而不是 HasNotScoredHundred 函数。

关于c++ - 从 vector 中排序和提取元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6954436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com