gpt4 book ai didi

c++ - 实例的排序 vector

转载 作者:行者123 更新时间:2023-11-30 05:33:37 24 4
gpt4 key购买 nike

我目前正在大学上编程课,他们对家庭作业有非常具体的要求。

本周我们有一个类叫做 Npt代表诺贝尔奖获得者。除其他外,此类包含姓名、获奖年份和获奖者领域。

现在我们应该创建另一个类,Nobelpreise ,其中包含一个容器,用于存放上述诺贝尔奖获得者类的实例。我们应该按诺贝尔奖的年份对该容器的元素进行排序。

我无法使用 std::sort与自定义比较器一起正常工作。这是我的代码大致的样子:

class Nobelpreise
{
private:
int numb;
vector<Npt> xx;
public:
Nobelpreise(){numb=0;}
void add(Npt &n1){xx.push_back(n1);numb++;return;}
Npt get_nobel(int i) {return xx[i];}
vector<Npt> get_xx() {return xx;}
int get_numb(){return numb;}
~Nobelpreise(){}
bool mycomp(Npt N1, Npt N2) {return (N1.get_jverl()<N2.get_jverl());}
};

方法get_jverl()来自 Npt类,只返回年份。

现在排序函数总是返回一个错误信息:

sort(Npl.get_xx().begin(), Npl.get_xx().end(), Npl.mycomp)

需要两个参数。它们不应该由排序函数提供吗?我也试过重载 <似乎也不起作用的运算符。

edit1:添加 end() 并从 Npl.mycomp 中删除 ()
edit2:我们需要使比较函数成为类的成员

最佳答案

制作你的方法mycomp静态,并编写一个方法来完成排序工作。

class Nobelpreise
{
private:
int numb;
vector<Npt> xx;
public:
Nobelpreise(){numb=0;}
~Nobelpreise(){}
vector<Npt>& get_xx() {return xx;}

static bool mycomp( const Npt &N1, const Npt &N2 ) { return N1.get_jverl() < N2.get_jverl(); }
//^^^^^^

void Sort() { std::sort( xx.begin(), xx.end(), &mycomp ); }
};

方法Npt::get_jverl必须是常量

返回类型 get_jverl() const { return ...; }

如果您在类之外进行排序,请注意您必须在方法中返回对 vector 的引用:vector<Npt>& get_xx() {return xx;}

sort(Npl.get_xx().begin(), Npl.get_xx().end(), &Nobelpreise::mycomp)

关于c++ - 实例的排序 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34657044/

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