以下是我所指的策略和库调用: 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;
}
主:
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>)
尖括号表示这些人'&lt;&gt;',由于某种原因它不会打印到网页上。
感谢您的帮助。
答案 0 :(得分:2)
我认为它需要是一个自由函数,或者声明它是静态的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);
}
答案 1 :(得分:2)
首先,查看帖子顶部给定链接中list :: 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(比较());
如果你写下面的话会产生编译错误,因为参数应该是一个对象,而不是类型。
yourLIst.sort(Compare);