我试图找到一个带有指向对象的向量的前10个对象

时间:2018-06-16 12:25:38

标签: c++ class c++11 pointers stdvector

以下是我尝试执行此操作的代码:

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}}函数。但我无法找到为什么这不能正常工作。

2 个答案:

答案 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_fixedpos第n大元素。您还可以找到一个更短的版本,名为max,灵感来自@jonathan mee。我编写了一个名为info_improved的类来测试代码。我遵守了这样的Port使用gcc。

g++ --std=c++14 test.cpp