簡體   English   中英

排序包含對象的向量的元素

[英]sorting elements of a vector containing objects

我上課了,這個班級包含一個數字。 而且我有一個包含類的對象指針的向量。 我想根據對象的數量對它們進行排序。 我怎樣才能做到這一點? 感謝您的回答。

#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 << ' ';
    }
}

例如,當我想要對對象進行排序時,它們將根據其地址進行排序。

您需要為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;

應該足夠了。

您可以通過三種方式執行此操作:

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)創建一個compare函數,然后調用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頭文件中找到排序功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM