[英]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中有一個叫做typeid
的operator
,您可以使用它。
例:
#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.