C++排序类数组

bao*_*hen 13 c++

C++排序数组类

我有一个数组对象记录以下..

这是在classone.h

ClassOne
{
string name;
int data;
float valueData;
}
Run Code Online (Sandbox Code Playgroud)

并在classone.cpp中创建构造函数

在main.cpp我创建了大小为10的ClassOne数组

#include "classone.h"

ClassOne cone[10];
Run Code Online (Sandbox Code Playgroud)

接下来是我为对象记录了几个值

现在ClassOne有3个对象

cone[0]
name = "hello"
data = 1
valueData = 20

cone[1]
name = "panda"
data = 2
valueData = 15

cone[2]
name = "joe"
data = 3
valueData = 25
Run Code Online (Sandbox Code Playgroud)

我想要实现的是做一个可以通过valueData最高升序形式重新排列这个数组的排序所以..它将是

cone[2]然后cone[0]cone[1]..

但问题是,如果我使用冒泡排序,我尝试谷歌并找到一些,他们正在排序,例如 int a[]={9,6,5,23,2,6,2,7,1,8};

但我想按类数组对象排序.并重新安排价值,我如何实现这一目标.

因此,当我cout它将是

-- Highest to lowest --
1) Name: Joe , Data = 3, Value =25
2) Name: Hello , Data =1 , Value = 20
3) Name: Panda, Data = 2, Value = 15
Run Code Online (Sandbox Code Playgroud)

感谢所有的帮助和指导!!

Ker*_* SB 23

最简单的方法是使用标准库:

#include <algorithm>

std::sort(cone, cone + 10,
          [](ClassOne const & a, ClassOne const & b) -> bool
          { return a.value < b.value; } );
Run Code Online (Sandbox Code Playgroud)

如果您愿意全局定义比较运算符,则甚至不需要lambda:

bool operator<(ClassOne const & a, ClassOne const & b)
{
    return a.value < b.value;
}

std::sort(cone, cone + 10);
Run Code Online (Sandbox Code Playgroud)

或者你可以使比较器成为一个成员函数.或者你可以给比较器函数一个自定义名称,并将其作为第三个参数传递给sort.在比较特定于您的情况并且不是"自然"的情况下,这可能是一个好主意:

bool ValueCmp(ClassOne const & a, ClassOne const & b)
{
    return a.value < b.value;
}

std::sort(cone, cone + 10, ValueCmp);
Run Code Online (Sandbox Code Playgroud)

如果您没有C++ 11支持(对于lambdas,如第一种情况),或者您想在多种不同情况下重用比较器,则最后一个版本很有用.

  • +1,请读者注意 - lambdas的使用仅限于C++ 11. (2认同)
  • @baokychen:如果你不了解公共和私人成员的概念,那么你就是领先于自己.在尝试排序对象之前,您应该完全掌握类的基础知识. (2认同)

jua*_*nza 8

使用std::sort和合适的排序函数/函子:

bool comp(const ClassOne& lhs, const ClassOne& rhs)
{
  return lhs.valueData < rhs.valueData;
}

std::sort(cone, cone+10, comp);
Run Code Online (Sandbox Code Playgroud)

或者,在C++ 11中,

std::sort(std::begin(cone), std::end(cone), comp);
Run Code Online (Sandbox Code Playgroud)


小智 7

你可以说实现了一个struct operator <该方法std::sort<algorithm>标题上使用,以迭代项目进行排序.

struct One {
string name;
int data;
float valueData;

bool operator < (const one &a) const{
return valueData <a.valueData;
}

};
Run Code Online (Sandbox Code Playgroud)

那么你所要做的就是创建一个这个结构的数组并使用sort函数对它进行排序


Ada*_*dam 2

您必须为您的类定义一个比较运算符。您的问题并不清楚如何确定一个对象是否小于另一个对象。