向量对象C++的快速排序函数
我试图将此函数转换为使用向量对象而不是整数数组。 向量对象如下所示:向量对象C++的快速排序函数,c++,class,sorting,vector,C++,Class,Sorting,Vector,我试图将此函数转换为使用向量对象而不是整数数组。 向量对象如下所示: std::vector<Heltal *> htal; Heltal类包含一个名为Heltal的私有整数 如何使用下面的函数对htal向量进行排序 void Array::Sort(int a[], int first, int last) { int low = first; int high = last; int x = a[(first+last)/2]; do {
std::vector<Heltal *> htal;
Heltal类包含一个名为Heltal的私有整数
如何使用下面的函数对htal向量进行排序
void Array::Sort(int a[], int first, int last)
{
int low = first;
int high = last;
int x = a[(first+last)/2];
do {
while(a[low] < x) {
low++;
}
while(a[high] > x) {
high--;
}
if(low<=high) {
std::swap(a[low],a[high]);
low++;
high--;
}
} while(low <= high);
if(first < high)
Array::Sort(a,first,high);
if(low < last)
Array::Sort(a,low,last);
}
正确的解决方案是放弃自定义排序并从中使用。这几乎可以保证在任何情况下都会更快、更优化。那么你就有:
#include <algorithm>
...
std::vector<Heltal *> htal;
...
// sort by pointer value
std::sort(htal.begin(), htal.end());
如果您想按对象值而不是指针值进行排序,可以使用std::vector而不是std::vector(这几乎肯定是您应该做的),或者将比较函数传递给std::sort
使用C++11 lambda进行此操作的示例:
std::sort(htal.begin(), htal.end(), [](Heltal *a, Heltal *b) { return *a < *b; });
正确的解决方案是放弃自定义排序并从中使用。这几乎可以保证在任何情况下都会更快、更优化。那么你就有:
#include <algorithm>
...
std::vector<Heltal *> htal;
...
// sort by pointer value
std::sort(htal.begin(), htal.end());
如果您想按对象值而不是指针值进行排序,可以使用std::vector而不是std::vector(这几乎肯定是您应该做的),或者将比较函数传递给std::sort
使用C++11 lambda进行此操作的示例:
std::sort(htal.begin(), htal.end(), [](Heltal *a, Heltal *b) { return *a < *b; });
你想到了什么?别再使用指针了。重点是什么?你试过了吗?不应该有任何改变。另外,您不需要数组::in-Array::Sorta,low,last;是的,我尝试过用htal参数替换int a[]参数,但我怀疑在函数中存储大量Heltal对象是否是最好的方法。Kerrek SB可以推荐一种更好的方法,如果你知道的话。你想出了什么主意?停止使用指针。重点是什么?你试过了吗?不应该有任何改变。另外,您不需要数组::in-Array::Sorta,low,last;是的,我尝试过用htal参数替换int a[]参数,但我怀疑在函数中存储大量Heltal对象是最好的方法。Kerrek SB可以自由推荐一种更好的方法,如果你知道的话。我相信他想按对象内部的int值排序。这是正确的标记,向量对象可以这样打印,这是我知道的唯一方法,至少是htal[0][0]。@krafs如果您为类定义了操作符<,那么您可以使用std::sort,这很好,您不需要获取任何内部成员。或者,您可以将传递给std::sort的比较函数作为类的一个朋友。哈,哈,抱歉,wjl提供了一些小信息,看起来您的解决方案是正确的。现在我觉得我们正在做“克拉夫家庭作业”。@马克,也许你是对的!但是如果是快速排序作业,教授可能不喜欢只使用std::sort=我相信他想按对象内部的int值进行排序。这是正确的标记,向量对象可以这样打印,这是我知道的唯一方法,至少是htal[0][0]。@krafs如果您为类定义了操作符<,那么您可以使用std::sort很好,您不需要获取任何内部成员。或者,您可以将传递给std::sort的比较函数作为类的一个朋友。哈,哈,抱歉,wjl提供了一些小信息,看起来您的解决方案是正确的。现在我觉得我们正在做“克拉夫家庭作业”。@马克,也许你是对的!但是如果是快速排序作业,教授可能不喜欢只使用std::sort=