c++如何按类类型对向量进行排序

c++ how to sort a vector by class type

本文关键字:排序 向量 何按类 类型 c++      更新时间:2023-10-16

我有一个基类"mediaInfo",它有三个派生类"Book"、"Video"answers"Music"。在我的主文件中,我有一个向量被声明为类型"mediaInfo",它动态分配内存,并根据测试脚本的输入将向量元素分配给类型"mediaInfo"、"Book"、"Video"或"Music"。该代码的另一个功能是按类型(Book、Video、Music、mediaInfo)、名称和媒体值对矢量元素进行排序。我记下了名字,正在为如何按类型排序而苦苦挣扎。如果需要,我可以提供代码。非常感谢。

向MediaInfo添加一个虚拟方法以提供排名信息。例如:

class MediaInfo {
public:
    virtual int rank() = 0;
};
class Book : MediaInfo {
public:
    virtual int rank() { return 100; }
};
class Video : MediaInfo {
public:
    virtual int rank() { return 200; }
};

则可以按obj->rank()等信息进行排序;

虽然我看到它不受欢迎,但另一种(技术上)有效的排序方法是使用typeid。快速示例:

std::vector<MediaInfo*> list;
list.push_back(new Book());
list.push_back(new Video());
list.push_back(new Book());
list.push_back(new MediaInfo());
std::sort(list.begin(), list.end(), [](MediaInfo* a, MediaInfo* b){ 
    return typeid(*a).hash_code() < typeid(*b).hash_code(); 
});

话虽如此,另一个答案中提到的虚拟方法可能是实现它的更好方法。
关于typeid陷阱的更多信息可以在这里找到。

由于C++98有一个名为typeidoperator,您可以使用它
示例:

#include <iostream>
#include <typeinfo>
using namespace std;
int main() {
  int i;
  cout << typeid(i).name();
  return 0;
}

输出:
int
您可以采用任何数据类型,而不仅仅是内置的。