c++ - 如何使用 list::sort() 对 STL 列表对象进行排序,同时将我的自定义排序函数作为参数传递给 list::sort?

标签 c++ list sorting stl

<分区>

这是我指的策略和库调用: 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>)

尖括号表示这些家伙'<>',出于某种原因它不会打印到网页上。

感谢您的帮助。

最佳答案

我认为它需要是一个自由函数,或者将其声明为静态 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);
}

关于c++ - 如何使用 list::sort() 对 STL 列表对象进行排序,同时将我的自定义排序函数作为参数传递给 list::sort?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20591269/

相关文章:

python - 列表元素大小写转换

c# - 我的问题是关于使用 C# linq 比较 List<string> 与 Dictionary <string, List<string>>

php - 如何按最接近的数字排序?

python - 使用ctypes将数组从Python传递到C++,无法完全处理它

c++ - 在 C++ 中读取二进制文件的最后一位

python - 获取值错误: Columns must be same length as key

java - 在 java 8+ 中分组时对 HashMap 中每个键的值进行排序列表

c++ - 埃拉托色尼筛 : bit wise optimized

c++ - 如何使用非类型参数重载类模板的 << 运算符?

c++ - 字符串是 C++ 中的 char 吗?