C++排序阵列类
我有一个数组对象,它记录以下内容。
这是classone.h
ClassOne
{
string name;
int data;
float valueData;
}构造函数是在classone.cpp创建的。
在main.cpp,我创建了大小为10的ClassOne数组
#include "classone.h"
ClassOne cone[10];接下来,我记录了几个对象的值。
现在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我想要做的是做一种可以由valueData最高升序形式重新排列这个数组的排序。它将是
cone[2]然后是cone[0],然后是cone[1] .
但问题是,如果我使用冒泡排序,我尝试谷歌并找到一些,他们正在排序,如int a[]={9,6,5,23,2,6,2,7,1,8};
但我想按类数组对象排序。把价值重新组合在一起,我怎么做到这一点。
所以当我吹嘘的时候
-- Highest to lowest --
1) Name: Joe , Data = 3, Value =25
2) Name: Hello , Data =1 , Value = 20
3) Name: Panda, Data = 2, Value = 15谢谢你的帮助和指导!!
发布于 2012-10-10 16:00:23
最简单的方法是使用标准库:
#include <algorithm>
std::sort(cone, cone + 10,
[](ClassOne const & a, ClassOne const & b) -> bool
{ return a.value < b.value; } );如果您愿意在全局范围内定义比较运算符,甚至不需要lambda:
bool operator<(ClassOne const & a, ClassOne const & b)
{
return a.value < b.value;
}
std::sort(cone, cone + 10);或者你可以让比较器成为一个成员函数。或者,您可以给比较器函数一个自定义名称,并将其作为sort的第三个参数传递。如果比较是特定于您的情况而不是“自然”的情况,这可能是一个好主意:
bool ValueCmp(ClassOne const & a, ClassOne const & b)
{
return a.value < b.value;
}
std::sort(cone, cone + 10, ValueCmp);如果您没有C++11支持(对于lambdas,如第一种情况),或者如果您想在多个不同的情况下重用比较器,那么最后一个版本是有用的。
发布于 2012-10-10 16:00:31
使用std::sort和适当的排序函数/函子:
bool comp(const ClassOne& lhs, const ClassOne& rhs)
{
return lhs.valueData < rhs.valueData;
}
std::sort(cone, cone+10, comp);或者,在C++11,
std::sort(std::begin(cone), std::end(cone), comp);发布于 2015-06-05 18:22:10
您可以创建一个实现operator <方法的结构,std::sort在<algorithm>标头中使用该方法对迭代项进行排序。
struct One {
string name;
int data;
float valueData;
bool operator < (const one &a) const{
return valueData <a.valueData;
}
};然后,您所要做的就是创建这个结构的数组,并使用排序函数对其进行排序。
https://stackoverflow.com/questions/12823573
复制相似问题