0

我有课,这个课包含一个数字。我有一个向量包含类的对象指针。我想根据它们的数量对这些对象进行排序。我怎样才能做到这一点?感谢您的回答。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

class Course
{
public:
    Course (int code, string const& name) : name(n), code(c) {}
    int getCourseCode() const { return code; }
    string const& getName() const { return name; }

private:
    string name;
    int code;
};

int main()
{
    vector<Course*> cor;
    vector<Course*>::iterator itcor;

    cor.push_back(new Course(3,"first"));
    cor.push_back(new Course(2,"sekond"));
    cor.push_back(new Course(4,"third"));
    cor.push_back(new Course(1,"fourth"));
    cor.push_back(new Course(5,"fifth"));  
    sort (cor.begin(), cor.end());
    for (itcor=cor.begin(); itcor!=cor.end(); ++itcor) {
        cout << *itcor << ' ';
    }
}

例如,当我想要根据它们的地址对对象进行排序时。

4

2 回答 2

4

您需要为该std::sort方法提供一个自定义比较器类或函数,以使其不按地址排序。

template <class RandomAccessIterator, class Compare>
void sort ( RandomAccessIterator first, RandomAccessIterator last, Compare comp );

其中comp可以定义为:

bool comparer(const Course* x, const Course* y) { /*compare*/ }
//or
struct comparer {
  bool operator() (const Course* x, const Course* y) { /*compare*/ }
} comparerObject;

并将排序称为:

std::sort(cor.begin(), cor.end(), comparer);   //method alternative

或者

std::sort(cor.begin(), cor.end(), comparerObject);   //class alternative

那,或者不要在vector. 从您发布的代码中,尚不清楚您是否真的需要指针:

vector<Course> cor;

应该足够了。

于 2012-10-25T15:57:48.330 回答
0

您可以通过三种方式做到这一点:

1) 重载 < 运算符,并调用 std::sort 算法。代码将如下所示:

bool operator<(Course *a, Course *b) const {
  // do comparison
  return A_BOOL_VALUE;
}

std::sort(array_of_courses.begin(),array_of_courses.end());

第一种方法是错误的,因为您不能在指针中重载 < 运算符。

2) 创建一个比较函数,然后调用第二个版本的std::sort. 代码如下所示:

bool compare(Course *a,Course *b) {
  // do comparison
  return A_BOOL_VALUE;
}

std::sort(array_of_courses.begin(),array_of_courses.end(),compare);

3)创建一个比较类,它的()运算符重载,然后调用std::sort. 编码:

struct Compare {
  bool operator()(Course *a, Course *b) {
    // do comparison
    return A_BOOL_VALUE;
  }
};

std::sort(array_of_courses.begin(),array_of_courses.end(),Compare);

注意:排序函数在algorithm头文件中。

于 2012-10-25T16:05:06.207 回答