[英]how to sort the null objects in a dynamically allocated array of objects, so that the null objects are in the back of the array c++
我有一个动态分配的对象数组。 某些数组由对象填充,而其他部分为null。 当我使用冒泡排序对数组中的对象进行排序时,它会正确排序,但是null的数组部分位于填充的数组部分的前面。 有什么方法可以将空对象推到数组的后面而不是前面?
数组中发生的情况的图片:
| null | null | null | object | object |
我想要数组的图片:
| object| object | null | null | null |
这是我的气泡排序代码:
::bubbleSort()
{
bool flag = true;
obj temp;
int j = 0;
while(flag)
{
flag = false;
j++;
for(int i = 0; i < (max - j); i++)
{
if(arr[i] > arr[i + 1])
{
temp = arr[i];
arr[i]= arr[i+1];
arr[i+1] = temp;
flag = true;
}
}
}
}
这是我定义我的arr的方式:
private:
obj *arr;
然后在我的构造函数中
max = 25
arr = new obj[max];
您可以将std::sort
与自定义比较器一起使用:
std::sort(std::begin(arr), std::end(arr), [](auto *p1, auto *p2) {
if (p1 == nullptr) {
return false;
}
if (p2 == nullptr) {
return true;
}
return *p1 < *p2;
});
假设您的自定义类型定义了operator<
。 当然,您可以使用其他任何喜欢的东西进行比较。
如果必须实现自己的排序算法,则仍然可以将比较器函数的主体内联到排序代码的中间。
如果要查找的函数可能是std :: partition ,如果您想要的只是在后面加上null。 如果还需要对其他值进行排序 ,则std :: sort是正确的选择。 两者都允许您定义比较,以定义排序或分区顺序,从而允许您自定义元素的排序方式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.