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,如第一种情况),或者您想在多种不同情况下重用比较器,则最后一个版本很有用.
使用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函数对它进行排序