簡體   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