我目前有一个mergesort接受一个int列表并从中生成一个数组,然后对它们进行排序,并打印出已排序的数组。目前,所有代码都在一个.cpp文件中。
为想要对用户定义的对象数组进行排序的人提供代码的好方法是什么?
我的直觉是提供一个虚拟方法文件(接口),并要求我的用户覆盖比较运算符和读/写方法。
最好远离数组并使用链表吗?
如果这太模糊/主观,那么就把我打晕并关闭它。我只是想要一些超越自己的想法。
答案 0 :(得分:3)
使用模板实现排序并使用指针数组而不是对象数组请求实现比较的仿函数,并提供使用<
运算符进行比较的默认仿函数。
答案 1 :(得分:1)
这是使用标准库的方法。
如果客户有自己的类型,则需要定义operator<
进行排序,并operator<<
打印到ostream
:
class Type {
//...
};
bool operator<(const Type& lhs, const Type& rhs) {
//...
}
ostream& operator<<(ostream& os, const Type& object) {
//...
}
vector<Type> originals;
vector<Type> values = originals;
stable_sort(values.begin(), values.end());
copy(values.begin(), values.end(),
ostream_iterator<Type>(cout, "\n"));
您的客户必须有充分的理由不这样做。
答案 2 :(得分:0)
不,你不需要链表。
最简单的解决方案,而不是为仿函数挖掘太多:
template <class T, int size>
class MergeSort
{
T* arr[size];
MergeSort(T* array[size])
{
// ...
}
void Sort()
{
// The rest is simple...
}
};