C++中的双重排序
double sort in C++
我正在开发一个用C++管理酒店的程序。我有一份房间清单。所有这些房间都有楼层号、房间号和价格。在我的一个报告/显示功能中,我必须先按楼层编号打印房间,然后按房间编号打印。我的意思是,每层楼都会有多个房间,所以如果你对1层的所有房间进行排序,它会在进入下一层之前按升序对房间进行排序。
现在,我知道了如何按楼层编号对房间进行排序,也知道了如何按照房间编号进行排序。我不明白的是,我该如何组合它,这样一个就不会改写另一个的顺序。
提前谢谢。
为了对Room
s的容器进行排序,您需要对其调用std::sort
。它有一个重载,需要一个比较器,即一个确定哪个Room
"较少"的函数对象。如果你想先按楼层排序,然后按房间编号排序,你必须编写一个合适的函数对象(或者简单地说是函数)。
bool CompareByFloorAndRoomNo(const Room& r1, const Room& r2)
{
if(r1.FloorNo() != r2.FloorNo())
return r1.FloorNo() < r2.FloorNo();
return r1.RoomNo() < r2.RoomNo();
}
...
int main()
{
...
std::sort(rooms.begin(), rooms.end(), CompareByFloorAndRoomNo);
}
好吧,必须定义的只是小于运算符。
基本上,如果Room1.floor<2号房间,那么1号房间必须比2号房间先来。如果Room1.floor==Room2.floor和Room1.number<2号房间,1号房间还需要在2号房间之前。否则,Room2必须排在第一位。
代码:
sort(rooms.begin(),rooms.end(),[](const Room& first,const Room& second)
{
return first.floor<second.floor ||
(first.floor == second.floor && first.number<second.number );
}
);
编辑:
此代码与C++11兼容。要编译它,您应该使用-std=c++0x标志(在g++4.5和4.6上),或-std=c++11(如果使用g++4.7 )
每个排序算法最终都必须比较两个项目,以确定哪个项目应该排在第一位。此时,您应该将两个值作为一个集合进行比较。
让我们思考一下应该发生什么:
- 楼层越大,楼层就越大
- 如果楼层数越小,它就越小
- 如果楼层编号相同,请比较房间编号以确定
相关文章:
- 二叉排序树无法编译
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- C++选择排序算法中的逻辑错误
- 使用C++程序合并排序没有得到正确的输出
- 计算排序向量的向量中唯一值的计数
- 排序算法c++
- 使用2个键的cpp-stl::优先级队列排序不正确
- 将结构向量排序为子组
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 如何对点云数据进行排序
- 对字符串进行排序时,在c++中处理sort()
- 是否有类似std::lower_bound的函数,而不需要排序/分区输入
- 下面是排序算法O(n)吗
- std::sort()函数无法对向量的一部分进行排序
- shell排序中的交换和比较
- clang格式:禁用排序包含
- 显示错误输出的简单数组排序程序
- 为什么我的排序算法会更改数组值
- 试图在c++中对数字列表进行排序
- 如何在C++中对数组进行冒泡排序