繁体   English   中英

C ++如何按类类型对向量排序

[英]c++ how to sort a vector by class type

我有一个“ mediaInfo”的基类,并且具有“书”,“视频”和“音乐”的三个派生类。 在我的主文件中,我有一个声明为“ mediaInfo”类型的向量,该向量会动态分配内存,并根据测试脚本的输入将向量元素分配给“ mediaInfo”,“ 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()和其他信息进行排序;

由于C ++ 98中有一个叫做typeidoperator ,您可以使用它。
例:

#include <iostream>
#include <typeinfo>
using namespace std;

int main() {
  int i;
  cout << typeid(i).name();
  return 0;
}

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

尽管我不鼓励这样做,但另一种(技术上有效)的排序方式是使用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陷阱的更多信息,请参见此处。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM