C++ 从向量中排序和提取元素
问题: 我有一个类CPerson,它的成员变量是年龄和分数。我已经创建了一个人的向量,并填充了对象。现在我只想提取得分为100分的人 我的方法: 我尝试根据标记对向量进行排序,然后循环遍历向量,找到100的第一个位置,然后再次循环,直到标记不同。这里的问题是我需要手动操作。如果我想按年龄搜索,那么我需要重复同样的算法。还有别的办法吗 我可以使用部分排序复制或上界/下界函数来实现它C++ 从向量中排序和提取元素,c++,visual-c++,stl,C++,Visual C++,Stl,问题: 我有一个类CPerson,它的成员变量是年龄和分数。我已经创建了一个人的向量,并填充了对象。现在我只想提取得分为100分的人 我的方法: 我尝试根据标记对向量进行排序,然后循环遍历向量,找到100的第一个位置,然后再次循环,直到标记不同。这里的问题是我需要手动操作。如果我想按年龄搜索,那么我需要重复同样的算法。还有别的办法吗 我可以使用部分排序复制或上界/下界函数来实现它 我使用的是VS2008听起来您需要如果删除复制
我使用的是VS2008听起来您需要
如果删除复制
功能,该功能最好命名为copy\u if\u not
。不幸的是,STL中缺少copy\u 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);
}
当然,如果要调整标记阈值,可以使用函子而不是HasNotScoredHundred
函数。听起来您需要remove\u copy\u if
函数,如果不,最好将其命名为copy\u。不幸的是,STL中缺少copy\u 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);
}
当然,如果你想调整标记阈值,你可以使用一个函子而不是HasNotScoredHundred
函数。为什么你需要对向量排序,而不仅仅是循环一次,在遍历时提取你需要的人?为什么你需要对向量排序,而不仅仅是循环一次,在你经历的过程中提取你需要的人?非常感谢。我使用函子,这样我可以比较其他参数,也非常感谢你。我使用函子,这样我也可以比较其他参数