对对象向量进行排序
Sort a vector of objects
我正在使用一个简单的c++程序,这个类:(我是一个非常初级的程序员(
class Car{
private:
string newBrand;
int newMileage;
int newYear;
double newPrice;
(我没有公布公开课(
bool sortByName(Car &CarVector)
{
return CarVector.getBrand() < CarVector.getBrand();
}
Main:
int main(){
vector<Car> CarVector;
ReadFile(CarVector);
ListCar(CarVector);
return 0;
}
LIst汽车函数,当我调用函数"排序"时,按名称对我的对象向量排序:
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: tt:Price:" << endl;
for(i=0; i<CarVector.size();i++)
{
cout << CarVector[i].getBrand() << " tt";
cout << CarVector[i].getMileage() << " tt";
cout << CarVector[i].getYear() << " tt";
cout << CarVector[i].getPrice() << " tt";
cout << endl;
}
do
{
cout << endl << "1.Back: ";
cin >> op;
}while(op!=1);
}
我认为这个程序应该有效。你能帮我找出错误吗?向致以最良好的问候
在比较函数中,您需要使用两个参数:它应该将这些对象相互比较。此外,它独立于任何向量(它对向量的元素进行操作(,因此不应该这样命名参数以避免混淆。
因此,功能可能看起来像这样:
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()
的签名末尾,以表明该函数不会修改其操作的对象。这被称为常量正确性。如前所述,该过程并不总是必需的(就像使用std::sort
时一样(,但具有常量正确性是一种很好的风格。
或者,如果编译器支持lambda,也可以使用它(需要启用C++11支持(:
std::sort(CarVector.begin(), CarVector.end(), [](const Car &a, const Car &b){
return a.getBrand() < b.getBrand();
});
请注意,如果要始终按名称比较cars,那么为类实现operator<
是有意义的。执行此操作时,不需要在对std::sort
的调用中指定比较函数,因为这些对象只需像a < b
而不是yourFunction(a, b)
那样进行比较。
bool sortByName(Car &CarVector1,Car &CarVector2)
{
return CarVector1.getBrand() < CarVector2.getBrand();
}
使用此sortByName
您必须在sortByName
方法中传递两个Car对象才能将两个对象比较为:
bool sortByName(Car &C1,Car &C2)
{
return C1.getBrand() < C2.getBrand();
}
查看此链接以了解更多详细信息
相关文章:
- 计算排序向量的向量中唯一值的计数
- 查找两个排序向量中共有的元素
- 对的排序向量 (std::vector<pair<int, int>>) 按对的第一个元素搜索并更新第二个元素值
- 如何从C++的对的排序向量中获取有关给定值的相应对
- 对象接收堆栈溢出异常 c++ 的排序向量
- "x"的所有元素都存在于"y"(排序向量)中吗?
- 指向指针排序向量的指针向量的 C++ 向量
- 未排序向量上的lower_bound/upper_bound
- 智能指针的排序向量:神秘崩溃
- 按类型排序向量并按类型或派生类型搜索
- 如何在不使用标准算法的情况下在排序向量中添加 c 元素?
- C++排序向量<double>与在<Object>双成员变量上键控的向量
- 字符串指针的排序向量
- 具有前导数字的字符串的排序向量
- 保证重新排序向量
- 结构解释的C 排序向量
- 更新排序向量的一个条目
- 通过在排序向量上使用二叉搜索来定位未排序向量中的元素
- 排序向量上 std::find_if 和 std::bind2nd 的替代品
- 使用QuickSort算法以降序排序向量