我有一个“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