我正在使用一个简单的c ++程序,这个类: (我是一个非常初学的程序员)
class Car{
private:
string newBrand;
int newMileage;
int newYear;
double newPrice;
(我没有发布公开课)
bool sortByName(Car &CarVector)
{
return CarVector.getBrand() < CarVector.getBrand();
}
主:
int main(){
vector<Car> CarVector;
ReadFile(CarVector);
ListCar(CarVector);
return 0;
}
LIst Car Functions,当我调用函数“sort”时,按名称命令我的对象向量:
void ListCar(vector<Car>&CarVector){
int i, op;
system("CLS");
sort(CarVector.begin(), CarVector.end(), sortByName);
cout << "MENU::CAR LIST BY NAME" << endl;
cout << ":Brand: \t:Mileage: \t:Year: \t\t:Price:" << endl;
for(i=0; i<CarVector.size();i++)
{
cout << CarVector[i].getBrand() << " \t\t";
cout << CarVector[i].getMileage() << " \t\t";
cout << CarVector[i].getYear() << " \t\t";
cout << CarVector[i].getPrice() << " \t\t";
cout << endl;
}
do
{
cout << endl << "1.Back: ";
cin >> op;
}while(op!=1);
}
我认为这个程序应该有效。你能帮我找到错误吗? 最好的问候
答案 0 :(得分:5)
在比较功能中,您需要使用两个参数:它应该将这些对象相互比较。此外,它独立于任何向量(它在向量的元素上运行),所以你不应该为这些参数命名以避免混淆。
所以函数看起来像这样:
bool sortByName(Car &a, Car &b)
{
return a.getBrand() < b.getBrand();
}
此外,将const
添加到通过引用传递的参数中是一个很好的选择(但并不总是必需的),以指示函数体不会修改它们:
bool sortByName(const Car &a, const Car &b)
{
return a.getBrand() < b.getBrand();
}
但是有必要将const
放在函数Car::getBrand()
签名的末尾,以表明该函数不会修改它运行的对象上。这称为 const-correctness 。如前所述,并不总是需要该过程(例如使用std::sort
时),但是具有const正确性的好方法。
或者你可以使用lambda,如果你的编译器支持它(你需要启用C ++ 11支持):
std::sort(CarVector.begin(), CarVector.end(), [](const Car &a, const Car &b){
return a.getBrand() < b.getBrand();
});
请注意,如果您要总是按照名称比较汽车,那么为您的班级实施operator<
是有意义的。这样做时,您无需在调用std::sort
时指定比较函数,因为这些对象只需与a < b
而不是yourFunction(a, b)
进行比较。
答案 1 :(得分:1)
bool sortByName(Car &CarVector1,Car &CarVector2)
{
return CarVector1.getBrand() < CarVector2.getBrand();
}
使用此sortByName
答案 2 :(得分:1)
您必须以sortByName
方法传递两个Car对象,将两个对象比较为:
bool sortByName(Car &C1,Car &C2)
{
return C1.getBrand() < C2.getBrand();
}
查看此link了解更多详情