Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 排序指针列表时出现问题_C++ - Fatal编程技术网

C++ 排序指针列表时出现问题

C++ 排序指针列表时出现问题,c++,C++,我试图对指针列表进行排序(在我的例子中,每个指针都是Job类型) 我的意图是按序列号对作业进行排序 void Container::jobSort(list<Job*> &jobs) { sort(jobs.begin(), jobs.end(), jobSerialCompare); } bool Container::jobSerialCompare(const Job *jobA,const Job *jobB) { return (jobA->

我试图对指针列表进行排序(在我的例子中,每个指针都是Job类型) 我的意图是按序列号对作业进行排序

void Container::jobSort(list<Job*> &jobs) {
    sort(jobs.begin(), jobs.end(), jobSerialCompare);
 }

bool Container::jobSerialCompare(const Job *jobA,const Job *jobB) {

   return (jobA->getSn()<jobB->getSn());
 }
void容器::作业排序(列表和作业){
排序(jobs.begin()、jobs.end()、jobSerialCompare);
}
bool容器::jobSerialCompare(常量作业*jobA,常量作业*jobB){
返回(jobA->getSn()getSn());
}
我得到的错误是:

error: no matching function for call to 'sort(std::_List_iterator<Job*>, std::_List_iterator<Job*>, <unresolved overloaded function type>)'
/usr/include/c++/4.2.1/bits/stl_algo.h:2852: note: candidates are: void std::sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = std::_List_iterator<Job*>, _Compare = bool (Container::*)(const Job*, const Job*)]
make: *** [src/Container.o] Error 1
错误:调用“sort(std::_List_iterator,std:_List_iterator,)时没有匹配函数
/usr/include/c++/4.2.1/bits/stl\U algo.h:2852:注:候选项为:void std::sort(\u RandomAccessIterator,\u RandomAccessIterator,\u Compare)[with _RandomAccessIterator=std::_List\u iterator,\u Compare=bool(容器::*)(const Job*,const Job*)]
make:**[src/Container.o]错误1
我通过如下更改代码来解决错误:

struct compare {
  bool operator()(const Job *jobA, const Job *jobB) {    return (jobA->getSn()<jobB->getSn());
 }
};

 void Container::jobSort(list<Job*> &jobs) {
    jobs.sort(compare());
 }
结构比较{ bool操作符()(const Job*jobA,const Job*jobB){return(jobA->getSn()getSn()); } }; 无效容器::作业排序(列表和作业){ jobs.sort(compare()); } 现在没有编译错误,但我想知道我的初始步骤有什么问题, 感谢您的帮助, 干杯

编辑- 非常感谢大家的帮助!
所有不同的答案有助于描绘更清晰的画面

在您的第一个版本中,
容器::jobSerialCompare
是一个成员函数,因此它有一个隐式的第一个参数
this
,因此它不符合
std::sort()
的期望。解决此问题的方法是要么在全局范围内定义函数,要么像您所做的那样定义一个函子,即使用
operator()()
定义一个类


编辑:。。。或者按照VinS的建议使用
mem_-fun

错误消息说明了一切。您正在尝试使用需要随机访问迭代器的sort()对列表进行排序。List只支持双向迭代器,因此独立的sort()无法工作。这就是为什么必须对列表使用特定的算法:
list.sort()


还有一些人发现了非静态比较器问题,这与您收到的消息无关(但仍然必须修复)。

在第一种情况下,
Container::jobSerialCompare
是一个成员函数。您应该使用
mem\u-fun
函数将成员函数转换为函数对象,以便将其与
sort
一起使用。试着写

#include <functional>
...
void Container::jobSort(list<Job*> &jobs) {
sort(jobs.begin(), jobs.end(), mem_fun(&Container::jobSerialCompare));
#包括
...
无效容器::作业排序(列表和作业){
排序(jobs.begin()、jobs.end()、mem_-fun(&Container::jobSerialCompare));
}