0

晚上好专家和大师!

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

这是在record.h

Class Record
{
private:
string name;
int data;
float valueData;
public:
bool operator<(const Record&) const;
}

并且构造函数是在record.cpp中创建的

record.cpp 我添加了这个

bool Record::operator<(const Record& rhs) const
{
return valueData < rhs.valueData;
}

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

#include "record.h"

Record rec[10];

我做了

sort(&rec[0], &rec[2]);

但似乎没有任何变化或排序..我有 3 个元素,rec[0],rec[1],rec[2],我想对它们进行排序,但它们是另一个头文件 record.h 及其 record.cpp 描述以上。

原始问题 接下来是我向对象记录了几个值

现在rec得到了3个索引

rec[0]
name = "jack1"
data = 1
valueData = 20

rec[1]
name = "jack2"
data = 2
valueData = 15

rec[2]
name = "jack3"
data = 3
valueData = 25

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

rec[2]然后.. rec[0]_rec[1]

但我想按类数组对象排序。并将值重新排列在一起,我该如何实现。

3 值是私有的,所以我不确定我在哪里创建排序函数,在 main.cpp 或在 record.cpp ,接下来是我如何对其进行排序以便它可以以下面的方式输出..

-- Highest to lowest --
1) Name: Jack3, Data = 3, Value =25
2) Name: Jack1 , Data =1 , Value = 20
3) Name: Jack2, Data = 2, Value = 15

感谢大家的帮助和指导!!

4

2 回答 2

2

改为这样做:

sort(&rec[0], &rec[3]);

您只对第一个两个元素进行排序,因为按照惯例,由迭代器对定义的范围内的第二个迭代器始终指向要操作的范围末尾的一个点。

于 2012-10-10T18:41:25.933 回答
0

与比较两个s 的std::sort东西一起使用。Record至少有 3 种方法可以提供这种比较。

1:实现一个operator<on Record

class Record
{
public:
  bool operator<(const Record& rhs) const
  {
    return valueData < rhs.valurData;
  }
};

...然后:

sort(&rec[0], &rec[10]);

2:提供函子

struct compare_records : public std::binary_function<bool, Record, Record>
{
  bool operator()(const Record& lhs, const Record& rhs) const
  { 
    return lhs.valueData < rhs.valueData;
  }
};

...然后:

sort_if(&rec[0], &rec[10], compare_records());

3:(如果你有 C++11 编译器)使用 lambda:

sort_if(&rec[0], &rec[10], [](const Record& lhs, const Record& rhs) -> bool
{
  return lhs.vaklueData < rhs.valueData;
});

编辑:

这是一个完整的示例,展示了如何使用第一种方法:

#include <cstdlib>
#include <map>
#include <algorithm>
using namespace std;

class Record
{
public:
    string name;
    int data;
    float valueData;
public:
    bool operator<(const Record& rhs) const
    {
        return valueData < rhs.valueData;
    }
};

int main()
{
    Record rec[10];
    rec[0].name = "jack1";
    rec[0].data = 1;
    rec[0].valueData = 20;

    rec[1].name = "jack2";
    rec[1].data = 2;
    rec[1].valueData = 15;

    rec[2].name = "jack3";
    rec[2].data = 3;
    rec[2].valueData = 25;

    sort(&rec[0], &rec[3]);

    bool bk = true;
}
于 2012-10-10T18:12:20.730 回答