如何使用list::sort()对STL列表对象进行排序,同时将自定义排序函数作为参数传递给list::排序
How do I sort an STL list object using list::sort() while passing my custom sorting function as a parameter to list::sort?
以下是我所指的策略和库调用:http://www.cplusplus.com/reference/list/list/sort/
下面是我的代码摘录(注意objFromList.getPriority()返回一个整数值):
标题:
class JobTable
{
private:
list <ProcessControlBlock> jobTable;
list<ProcessControlBlock>::iterator iter;
public:
JobTable();
void addProcessControlBlock(int, int, int, int, int);
void sortJobTableByPriority();
void printJobTable();
bool comparePriority( ProcessControlBlock&,
ProcessControlBlock&);
};
实现:
void JobTable::addProcessControlBlock(int jobNumber, int jobSize,
int currentTime, int jobPriority,
int maximumCpuTime)
{
jobTable.push_back(*(new ProcessControlBlock(jobNumber,jobSize,
currentTime, jobPriority,maximumCpuTime)));
}
void JobTable::sortJobTableByPriority()
{
jobTable.sort(comparePriority);
}
bool JobTable::comparePriority( ProcessControlBlock& first,
ProcessControlBlock& second)
{
bool isLessThan = false;
if(first.getJobPriority() < second.getJobPriority())
{
isLessThan = true;
}
return isLessThan;
}
main:
int main()
{
JobTable jobTable;
jobTable.addProcessControlBlock(6,6,6,6,6);
jobTable.addProcessControlBlock(2,2,2,2,2);
jobTable.addProcessControlBlock(1,1,1,1,1);
jobTable.addProcessControlBlock(4,4,4,4,4);
jobTable.addProcessControlBlock(5,5,5,5,5);
jobTable.addProcessControlBlock(3,3,3,3,3);
jobTable.printJobTable();
cout << "sorting table..." << endl;
jobTable.sortJobTableByPriority();
jobTable.printJobTable();
return 0;
}
我不断得到编译器错误:
对的调用没有匹配函数
std::list<ProcessControlBlock>::sort(<unresolved overloaded function type>)
尖括号表示这些家伙"<>",由于某种原因,它无法打印到网页上。
谢谢你的帮助。
我认为它需要是一个自由函数,或者声明它为静态static bool comparePriority( const ProcessControlBlock&, const ProcessControlBlock&);
。另一种选择是将其封装在一个结构中,这样它就可以用作函子(如评论中发布的链接所述)
由于您的代码还有许多其他编译错误,我发现很难为您编写一个示例。
bool comparePriority( const ProcessControlBlock& first,
const ProcessControlBlock& second)
{
bool isLessThan = false;
if(first.getJobPriority() < second.getJobPriority())
{
isLessThan = true;
}
return isLessThan;
}
void JobTable::sortJobTableByPriority()
{
jobTable.sort(comparePriority);
}
首先,查看文章顶部给定链接中的第二个重载列表::sort。上面写着,
template <class Compare> void sort (Compare comp);
这意味着它采用某种类型的对象(在本例中称为Compare)作为参数。
重要的是,该类型应能够充当比较器
因此,您需要首先将JobTable::comparePriority作为一个类。它应该实现一个二进制谓词,其形式为:
bool operator()(const ProcessControlBlock& first, const ProcessControlBlock& second) const {
// your logic
return true;
}
然后,您应该将这个类的一个实例作为list::sort()的参数传递,就像一样
yourList.sort(Compare());
如果您像下面这样写,它将产生编译错误,因为参数应该是对象,而不是类型。
yourLIst.sort(Compare);
相关文章:
- 使用std::multimap迭代器创建std::list
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 二叉排序树无法编译
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- 使用迭代器对 std::list 进行排序
- std::list::使用自定义比较器排序时出现分段故障
- 为什么tha std :: list ::排序不起作用
- 为什么没有针对STD :: MAP的find/lower_bound过载,而STD :: list没有排序的过载
- 使用 myclass::operator[](int i) 对 std::list<myclass*> 进行排序
- 如何使用list::sort()对STL列表对象进行排序,同时将自定义排序函数作为参数传递给list::排序
- 使用 std::sort 对 std::list 进行排序
- 在排序的std::list中搜索的复杂性是多少
- 如何在 std::vector 中查找重复项<strings>并返回一个 std::list 它们按字母顺序排序,在该结果列表中没有重复项
- std::list指针上排序算法的STL谓词
- 当需要成员数据时,如何对std:list进行排序
- 如何将元素添加到List (c++)中进行排序
- std::list::排序和指向元素的指针
- List的c++排序函数
- 插入时保持stdvector/list排序,或对所有对象进行排序
- 部分排序 std::list