Mar*_*rco -1 c++ sorting vector
我正在使用一个简单的c ++程序,这个类:(我是一个非常初学的程序员)
class Car{
private:
string newBrand;
int newMileage;
int newYear;
double newPrice;
Run Code Online (Sandbox Code Playgroud)
(我没有发布公开课)
bool sortByName(Car &CarVector)
{
return CarVector.getBrand() < CarVector.getBrand();
}
Run Code Online (Sandbox Code Playgroud)
主要:
int main(){
vector<Car> CarVector;
ReadFile(CarVector);
ListCar(CarVector);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
LIst Car函数,当我调用函数"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);
}
Run Code Online (Sandbox Code Playgroud)
我认为这个程序应该可行.你能帮我找到错误吗?最好的祝福
在比较函数中,您需要使用两个参数:它应该将这些对象相互比较.此外,它独立于任何向量(它对向量的元素进行操作),因此您不应该将这些参数命名为避免混淆.
所以函数看起来像这样:
bool sortByName(Car &a, Car &b)
{
return a.getBrand() < b.getBrand();
}
Run Code Online (Sandbox Code Playgroud)
此外,添加const到通过引用传递的参数以便指示函数体不会修改它们是一个很好的选择(但并不总是需要):
bool sortByName(const Car &a, const Car &b)
{
return a.getBrand() < b.getBrand();
}
Run Code Online (Sandbox Code Playgroud)
但是,有必要const在函数签名的末尾放置,Car::getBrand()以指示该函数不会修改它所操作的对象.这称为const-correctness.如前所述,并不总是需要该过程(如使用时std::sort),但具有const正确性是一种很好的风格.
或者,如果编译器支持lambda,则可以使用lambda(需要启用C++ 11支持):
std::sort(CarVector.begin(), CarVector.end(), [](const Car &a, const Car &b){
return a.getBrand() < b.getBrand();
});
Run Code Online (Sandbox Code Playgroud)
请注意,如果您要按名称比较汽车,那么operator<为您的班级实施一个是有意义的.这样做时,您不需要在调用中指定比较函数std::sort,因为这些对象只是比较a < b而不是yourFunction(a, b).
| 归档时间: |
|
| 查看次数: |
1033 次 |
| 最近记录: |