c++如何按类类型对向量进行排序
c++ how to sort a vector by class type
我有一个基类"mediaInfo",它有三个派生类"Book"、"Video"answers"Music"。在我的主文件中,我有一个向量被声明为类型"mediaInfo",它动态分配内存,并根据测试脚本的输入将向量元素分配给类型"mediaInfo"、"Book"、"Video"或"Music"。该代码的另一个功能是按类型(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()
等信息进行排序;
虽然我看到它不受欢迎,但另一种(技术上)有效的排序方法是使用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陷阱的更多信息可以在这里找到。
由于C++98有一个名为typeid
的operator
,您可以使用它
示例:
#include <iostream>
#include <typeinfo>
using namespace std;
int main() {
int i;
cout << typeid(i).name();
return 0;
}
输出:int
您可以采用任何数据类型,而不仅仅是内置的。
相关文章:
- 计算排序向量的向量中唯一值的计数
- 查找两个排序向量中共有的元素
- 对的排序向量 (std::vector<pair<int, int>>) 按对的第一个元素搜索并更新第二个元素值
- 如何从C++的对的排序向量中获取有关给定值的相应对
- 对象接收堆栈溢出异常 c++ 的排序向量
- "x"的所有元素都存在于"y"(排序向量)中吗?
- 指向指针排序向量的指针向量的 C++ 向量
- 未排序向量上的lower_bound/upper_bound
- 智能指针的排序向量:神秘崩溃
- 按类型排序向量并按类型或派生类型搜索
- 如何在不使用标准算法的情况下在排序向量中添加 c 元素?
- C++排序向量<double>与在<Object>双成员变量上键控的向量
- 字符串指针的排序向量
- 具有前导数字的字符串的排序向量
- 保证重新排序向量
- 结构解释的C 排序向量
- 更新排序向量的一个条目
- 通过在排序向量上使用二叉搜索来定位未排序向量中的元素
- 排序向量上 std::find_if 和 std::bind2nd 的替代品
- 使用QuickSort算法以降序排序向量