以下是我尝试执行此操作的代码:
void info(vector <Port *>& p)
{
int pos=0;
float max;
vector <Port *> top;
if (p.size()<=10)
for (int i=0; i<p.size(); i++)
p[i] -> print();
else
{
for (int i=0; i<p.size(); i++)
top.push_back(p[i]);
for (int i=0; i<10; i++)
{
max=top[0]->calc();
for (int j=1; j<top.size(); j++)
{
if ((top[j]->calc())>max)
{
max=top[j]->calc();
pos=j;
}
}
top[pos]->print();
top.erase(top.begin()+pos);
}
}
}
Port
类包含一些字符串和指针向其他类的某些对象包含一些浮。我需要找到具有最大值的10
Port对象。 calc
函数查找向量的对象总和并返回它。我需要找到向量10
的前p
,具体取决于calc
的{{1}}函数。但我无法找到为什么这不能正常工作。
答案 0 :(得分:1)
您似乎正在寻找partial_sort_copy
。如果您的预期输入为p
,而您的预期输出为vector<Port*> top(10)
,则可以按以下方式轻松使用:
partial_sort_copy(cbegin(p), cend(p), begin(top), end(top), [](const auto lhs, const auto rhs){ return lhs->calc() > rhs->calc(); })
答案 1 :(得分:0)
下面你会找到一个可运行的代码段,其中包含一个名为info
的{{1}}的固定版本,其中我为每个循环搜索正确初始化了info_fixed
和pos
第n大元素。您还可以找到一个更短的版本,名为max
,灵感来自@jonathan mee。我编写了一个名为info_improved
的类来测试代码。我遵守了这样的Port
使用gcc。
g++ --std=c++14 test.cpp