我有一個「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. C++排序類類型向量
- 2. 排序向量類
- 3. 按類型排序矢量按類型搜索或派生類型
- 4. 排序結構的C++向量類
- 5. 按特定類型排序收集c#
- 6. Visual Studio C#按類型排序字段
- 7. 如何按類型排序 - SQL
- 8. 按類型排序在ractive
- 9. Elasticsearch按類型排序
- 10. Objective-C,按字母順序排序NSMultable類型的類數組?
- 11. z3:如何將布爾類型轉換爲位向量排序
- 12. 匿名類型c#排序
- 13. C++的類型轉換向量類
- 14. C++排序類類矢量內
- 15. 基於變量類的排序向量
- 16. C++如何從類類型的向量中刪除重複項?
- 17. C++向量排序
- 18. 排序向量C++
- 19. 如何按類型排列列表?
- 20. 排序一個類的向量
- 21. 根據類中的變量對類的向量進行排序
- 22. 按數據類型排序python字典
- 23. 按值類型對數組排序
- 24. ListView:無法按類型'System.Object'排序
- 25. 按對象類型排序NSArray
- 26. 按Python中的類型排序
- 27. Drupal 7:分類按重量排序
- 28. 快速排序按第一類型然後第二類型的向量對字符串和整數
- 29. 返回向量的泛型類類型
- 30. 存儲泛型T類的C++向量
這是一個非常好的解決方案,但是請注意它使'MediaInfo'抽象,因此無法實例化。你可以通過在等級中使用一個虛函數來解決這個問題(如果需要的話),而不是'MediaInfo'類中的純虛函數。 – Mohammad