我有不同的类,我想用这些类中的对象制作一个向量,然后按值对其进行排序
I have different classes and I want to make a vector with objects from those classes and sort it by a value
我有第一类。
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
才能工作。
相关文章:
- C++:如何读取分离变量,然后读取向量
- 如何正确地推回然后遍历堆中对象的向量?
- 如何将子类作为函数的参数传递给期望基类,然后将该对象传递到指向这些抽象类对象的指针向量中?
- C++,从文件读取到结构,然后读取到向量(结构被推入向量太多次,而不仅仅是一次)
- 有没有办法搜索向量的元素,<String>然后检查它是否包含特定的字符,如果它确实打印了它
- C++:将向量传递给函数,然后在main中调用函数.错过了什么
- C++ 按数值对元组<字符串、浮点数>然后按字典顺序排序的向量
- 在结构向量中搜索一个数据成员,然后打印匹配的所有数据成员
- 如何在每次循环迭代期间生成向量,存储数据,然后删除该向量?
- 将整数向量转换为字节数组向量,然后调用每个字节数组
- C++ std::vector 创建对象然后添加对象与在向量中创建对象之间的区别?
- 我可以在中断中写入向量,然后以安全的方式仅在主线程内读取吗?
- 制作一个对的向量,对其进行排序,然后从中提取向量
- 根据标准对结构向量进行排序,然后显示结果
- C - 将文本文件读为一串单词,然后将字符串分为向量
- 为什么我的将向量保存到文件然后再次读出的方法不起作用?
- 我有不同的类,我想用这些类中的对象制作一个向量,然后按值对其进行排序
- remove_if然后擦除对向量有效吗
- 如何在C++中创建一个网格,这将允许我将每个索引设置为一个向量,以便以后操作该向量,然后绘制它
- C 将向量转换为2个十六进制,然后将其存储在字符串中