【发布时间】:2019-06-12 18:28:39
【问题描述】:
在指针向量 (std::vector<SomeObject*) 中进行多重排序的最佳方法应该是什么?我应该为多个数据成员创建一个排序功能吗?最好的方法是什么?或者也许我应该为每个数据成员创建单独的函数?或者我应该使用std::sort() 的一些东西?
假设我有一些带有一些数据成员的类 Vehicle
class Vehicle{
private:
unsigned int _maxSpeed;
unsigned short _numberOfHorsePower;
unsigned short _numberOfGears;
unsigned short _numberOfWheels;
unsigned int _weight;
}
我希望可以选择按每个数据成员对这些对象进行排序,例如 SortByMaxSpeedAsc(),SortByWeightAsc(),SortByWeightDesc()。
一个数据成员的示例排序
void Vehicles::sortVehiclesByWeightAsc()
{
Vehicle* tmp;
size_t n = _VehiclesCollection.size();
int i, j, minIndex;
for (i = 0; i < n - 1; i++)
{
minIndex = i;
for (j = i + 1; j < n; j++)
{
if (_VehiclesCollection[j].weight < _VehiclesCollection[minIndex].weight)
{
minIndex = j;
}
}
if (minIndex != i)
{
tmp = _VehiclesCollection[i];
_VehiclesCollection[i] = _VehicleCollection[minIndex];
_VehiclesCollection[minIndex] = tmp;
}
}
}
【问题讨论】:
-
将
std::sort与自定义比较器一起使用。 -
似乎 ts 询问多个排序,即按标准 1 单独排序的数组。并同时按标准 2 对同一数组进行排序。即独立。并且可能的重复说明了单一排序:按标准 1 和在标准 1 的相同值内也按标准 2 排序。