我有一個「mediaInfo」的基類,有三個派生類「Book」「Video」和「Music」。在我的主文件中,我有一個聲明爲類型「mediaInfo」的矢量,該類型動態分配內存並指定矢量元素,以根據測試腳本的輸入鍵入「mediaInfo」「Book」「Video」或「Music」。代碼的另一個功能是按類型(書本,視頻,音樂,媒體信息),名稱和媒體值對矢量元素進行排序。我有名字了,並且正在努力如何按類型排序。如果需要,我可以提供代碼。謝謝。C++如何按類類型排序向量
1
A
回答
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
由於C++ 98有一個operator
調用typeid
,你可以使用它。
例子:
#include <iostream>
#include <typeinfo>
using namespace std;
int main() {
int i;
cout << typeid(i).name();
return 0;
}
輸出:
int
你可以把任何類型的數據不僅內置。
+0
實際上它不是一種方法,並且從C++ 98開始就存在。 –
+0
更正了謝謝。 –
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.
相關問題
- 1. 排序向量類
- 2. 按類型排序矢量按類型搜索或派生類型
- 3. 按特定類型排序收集c#
- 4. 如何按類型排序 - SQL
- 5. 按類型排序在ractive
- 6. Objective-C,按字母順序排序NSMultable類型的類數組?
- 7. z3:如何將布爾類型轉換爲位向量排序
- 8. C++的類型轉換向量類
- 9. C++如何從類類型的向量中刪除重複項?
- 10. 按值類型對數組排序
- 11. 按Python中的類型排序
- 12. Drupal 7:分類按重量排序
- 13. C++中的向量聲明類型
- 14. 存儲泛型T類的C++向量
- 15. 如何在wordpress中按類別排序?
- 16. 如何排序基於類型的LINQ
- 17. 如何排序類型化TLIST
- 18. 使用django-haystack,如何按內容類型排序結果
- 19. LINQ排序:不能按類型排序「System.IComparable」
- 20. C++如何獲得結構類型向量的大小
- 21. 模板類C++ - 排除某些類型
- 22. MySQL按類別和子類別排序
- 23. 按類別排序結果
- 24. Woocommerce按類別排序
- 25. 類類型的多維向量
- 26. 參考STL向量類型
- 27. C++類 - 如何從函數返回自定義類型的向量?
- 28. C++類 - 如何將自定義類型的向量傳遞到函數
- 29. 包含派生類型的C++向量基類
- 30. 分配向量,它的內存類型是自己的類C++
這是一個非常好的解決方案,但是請注意它使'MediaInfo'抽象,因此無法實例化。你可以通過在等級中使用一個虛函數來解決這個問題(如果需要的話),而不是'MediaInfo'類中的純虛函數。 – Mohammad