我该如何在C++中封装一个供一般客户使用的合并排序程序

How would I encapsulate a mergesort program for general customer use in C++?

本文关键字:客户 程序 排序 合并 一个 C++ 封装      更新时间:2023-10-16

我目前有一个mergesort,它接受一个int列表,并用它们组成一个数组,然后对它们进行排序,并打印出排序后的数组。目前,所有的代码都在一个.cpp文件中。

向想要对用户定义的对象数组进行排序的人提供代码的好方法是什么?

我的直觉是提供一个仅限虚拟方法的文件(接口),并要求我的用户覆盖比较运算符和读/写方法。

离开数组并使用链表会是最好的选择吗?

如果这太模糊/主观了,那就扇我耳光,把它关掉。我只是想要一些超出我自己的想法。

使用模板来实现排序,并使用指针数组而不是对象数组。请求实现比较的函子,还提供使用<运算符进行比较的默认函子。

这是如何使用标准库来实现的。

如果客户有自己的类型,他们需要定义用于排序的operator<和用于打印到ostream:的operator<<

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"));

你的客户必须有充分的理由不这样做。

不,您不需要链表。

最简单的解决方案,不需要为函子挖掘太多:

template <class T, int size>
class MergeSort
{
   T* arr[size];
   MergeSort(T* array[size])
   {
     // ...
   }
   void Sort()
   {
      // The rest is simple...
   }
};