C++选择要排序的属性

tom*_*012 1 c++ methods object

假设我有一个具有三个属性的类Car,所有属性都是inttype:year,modelNo和topSpeed.

我有一个汽车列表,以及一个对此列表进行排序的函数.该方法目前通过car.modelNo对汽车进行分类.

如果我想要按年份,modelNo或topSpeed排序,我可以制作三种不同的方法sortByYear,sortByModelNo等等.

有没有办法可以实现一个排序方法,而只是传递它想要排序的属性的名称?所以我可以打电话给sortCars(carsList, modelNo); OrsortCars(carsList, year);

这些属性中的每一个都将始终为int,并且列表将仅包含Car对象.

Que*_*tin 6

是的,使用指向成员的指针.

void sortCars(std::vector<Car> &cars, int Cars::*property) {
    std::sort(begin(cars), end(cars), [=](Car const &a, Car const &b){
         return (a.*property) < (b.*property);
    });
}
Run Code Online (Sandbox Code Playgroud)

调用语法:

sortCars(myCars, &Cars::modelNo);
Run Code Online (Sandbox Code Playgroud)