我有不同的类,我想用这些类中的对象制作一个向量,然后按值对其进行排序

I have different classes and I want to make a vector with objects from those classes and sort it by a value

本文关键字:然后 向量 一个 排序 对象      更新时间:2023-10-16

我有第一类。

class Class1
{
public:
   Class1();
   double getVal();
   bool operator<(Class1& A) { return getVal() > A.getVal(); }
virtual ~Class1();
}

,从这个类我得出两个类。

class Class2 : virtual public Class1
{
 protected:
   int val1;
 public:
 int getVal(){ return val; }
 bool operator<(Class1& A) { return getVal() > A.getVal(); }
 }  

和第二类。

 class Class3 : virtual public Class1
 {
    protected:
       double val2;
    public:
       double getVal(){ return val; }
       bool operator<(Class1& A) { return getVal() > A.getVal(); }
 }

最终从这些类中得出一个类。

 class Class4 : public Class2, public Class3
 {
   protected:
       char* info;
   public:
       double getVal(){ return val1+val2; }
       bool operator<(Class1& A) { return getVal() > A.getVal(); }
 }

,我有:

 void main(){
     vector<Class1*> vec;
     vec.push_back(new Class2(3));
     vec.push_back(new Class3(5));
     vec.push_back(new Class4(2));
    sort(vec.begin(),vec.end());
 }

代码在向量中的对象推回对象,但是当我试图对其进行排序时,什么也不会发生。我怀疑父母类(class1)和主要是getVal()方法的问题,但我不知道该怎么办。问题是:如何对此向量进行排序?

这里的问题是您有一个 pointers 的向量。因此,std::sort进行的比较是使用 pointers 进行的,而不是它们指向的结构。

为了使其工作,您必须提供一个全局的operator<函数,该功能将两个指针作为参数。或者,您将比较函数作为第三个参数与std::sort。两者都需要解释指针。

另外,您仍然需要将功能标记为virtual才能工作。

相关文章: