如何按moduleSize升序排序memory结构体中的freeMem链表?
按moduleSize升序排序list的正确实现
问题分析
你之前的代码存在两个关键错误:
- 排序时传入的lambda参数类型错误:针对
list<memBlock>排序时,比较函数需要接收两个memBlock对象,而非memory对象 - 比较逻辑错误:你试图直接比较整个链表,而非目标成员
moduleSize
另外注意:std::list不支持随机访问迭代器,使用它自带的成员函数sort()比通用的std::sort效率更高,优先用list的sort()方法。
正确实现方案
方案1:使用Lambda表达式(推荐)
直接在sort()中传入lambda,指定比较逻辑为moduleSize的升序:
memo.freeMem.sort([](const memBlock& a, const memBlock& b) { // 返回true表示a应该排在b前面,实现升序排序 return a.moduleSize < b.moduleSize; });
方案2:使用独立比较函数
如果需要复用比较逻辑,可以定义一个独立的函数:
// 定义比较函数 bool compareMemBlockBySize(const memBlock& a, const memBlock& b) { return a.moduleSize < b.moduleSize; } // 调用list的sort方法 memo.freeMem.sort(compareMemBlockBySize);
扩展:降序排序
如果需要按moduleSize降序排列,只需将比较逻辑改为:
// Lambda方式 memo.freeMem.sort([](const memBlock& a, const memBlock& b) { return a.moduleSize > b.moduleSize; });
内容的提问来源于stack exchange,提问作者Miguel Ribeiro
相关产品推荐
相关产品推荐

