繁体   English   中英

如何在动态分配的对象数组中对空对象进行排序,以使空对象位于数组c ++的后面

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM