C++列表排序功能
C++ List sort function
我不知道如何正确实现C++中列表的排序。我收到构建错误:
'Ranker::compare':函数调用缺少参数列表;使用
'&Ranker::compare'
创建指向成员的指针
如何正确实现列表的排序函数?
Ranker.h:
list<Competitor*> sorted;
排名.cpp:
bool Ranker::compare(Competitor* first, Competitor* second) {
if (first->getTime() < second->getTime())
return true;
else
return false;
}
int Ranker::addList(Competitor* starter) {
sorted.push_back(starter);
sorted.sort(compare);
}
只需使rankor成为一个简单的函子:
struct Compare
{
bool operator()(Competitor* first, Competitor* second) const {
return first->getTime() < second->getTime();
}
};
// STUFF
sorted.sort(Compare());
或者如果您有 C++11
sorted.sort([](Competitor* first, Competitor* second) {
return first->getTime() < second->getTime();
});
Ranker::compare()
是一个成员函数。成员函数绑定到实例。尝试使用静态方法或"免费"函数。
该函数实际上Ranker::compare()
有三个参数: 除了两个Competitor
对象之外,它还采用指向对象的隐式指针作为参数。但是,传递的二进制谓词 do std::list<...>::sort()
仅接受两个参数。
最简单的解决方法可能是使函数成为static
成员。但是,这并不是说这可能不是最快的方法,因为函数指针很少可以内联。如果要减少函数调用开销,可能需要将逻辑封装到合适的函数对象中:
struct RankerCompare {
bool operator()(Competitor const* first, Competitor const* second) const {
return first->getTime() < second->getTime();
}
};
...
sorted.sort(RankerCompare());
顺便说一句,布尔值不会通过从条件语句返回true
或false
而变得更加布尔!直接返回布尔值是完全可以的!
相关文章:
- 是否有任何C++功能可以对地图进行排序?
- 在气泡排序程序中未声明错误功能
- 更改运行时优先级队列的排序功能
- 不正确的比较和交换计数器输出用于快速排序功能
- 排序功能在C++中未按预期工作
- 通过将其中一个模板更改为 muliset 后,我可以在 PBDS 排序集上使用计数功能<int>less_equal<int>
- 基于不同字段的对象向量的排序功能
- 3路随机快速排序分区功能
- C++中排序的自适应功能
- 如何将标准::矢量插入具有自定义排序功能的 std::set 中
- C++插入排序错误功能不起作用
- 使用不遵循"严格弱排序"的比较功能对列表进行排序
- 如何在C++中使用自定义比较功能对字符串进行排序?
- 我对C 中共享指针列表进行排序的功能未完成类型
- 快速排序功能不一致
- 我的选择排序功能C 有什么问题
- 排序功能不起作用
- 面临CPP中排序功能的问题
- 使用赋值运算符功能按距离对数组对象进行排序
- 错误:使用自定义比较功能排序时"invalid comparator"