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

时间:2015-04-07 05:18:15

标签: c++ class sorting vector

我有一个“mediaInfo”的基类,有三个派生类“Book”“Video”和“Music”。在我的主文件中,我有一个声明为“mediaInfo”类型的向量,它动态分配内存并将vector元素分配给“mediaInfo”“Book”“Video”或“Music”,这取决于测试脚本的输入。该代码的另一个功能是按类型(书籍,视频,音乐,媒体信息),名称和媒体值对矢量元素进行排序。我有名字,我正在努力解决如何按类型排序。如果需要,我可以提供代码。谢谢。

3 个答案:

答案 0 :(得分:5)

向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()和其他信息排序;

答案 1 :(得分:1)

由于C ++ 98有一个名为operator的{​​{1}},你可以使用它。
示例:

typeid

输出:
#include <iostream> #include <typeinfo> using namespace std; int main() { int i; cout << typeid(i).name(); return 0; }
您可以采用任何不仅内置的数据类型。

答案 2 :(得分:1)

虽然我看到它气馁,但另一种(技术上)有效的排序方法是使用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陷阱的更多信息可以在here.

找到