gpt4 book ai didi

C++ 标准列表使用自定义比较器排序,该比较器取决于对象实例的成员变量

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:11:26 26 4
gpt4 key购买 nike

类:

Class:
private:
...
vector<string> words;
vector< list<int> > vints;
public:
myFunction(...)

我在另一个成员函数中对非空列表调用排序:

void myClass::myFunction (...) {
...
if (!vints[i].empty()) vints[i].sort(sortFunc);
...
}

我的排序函数:

bool myClass::sortFunc(const int& i, const int& j) { return (words[i] < words[j]); }

错误:

error: no matching function for call to ‘std::list<int, std::allocator<int>      >::sort(<unresolved overloaded function type>)’
/usr/include/c++/4.4/bits/list.tcc:301: note: candidates are: void std::list<_Tp, _Alloc>::sort() [with _Tp = int, _Alloc = std::allocator<int>]
/usr/include/c++/4.4/bits/list.tcc:378: note: void std::list<_Tp, _ Alloc>::sort(_StrictWeakOrdering) [with _StrictWeakOrdering = bool (SuperWordSearch::*) (const int&, const int&), _Tp = int, _Alloc = std::allocator<int>]

我研究并遇到了以下问题:

C++ Custom compare function for list::sort

Problem sorting a list of pointers

Error in std::list::sort with custom comparator (expected primary-expression before ')' token)

如果不是因为在此类中,sortFunc 依赖于该对象实例的成员变量 WORDS,它们就足够了。所以我不能将比较器函数 (sortFunc) 设为静态或全局

编辑:刚刚遇到这个How to sort a std:list when you need member data?并且它通过创建友元类提供了解决方案,但是是否可以在用户定义的类本身内部完成此操作?

最佳答案

使用 lambda 表达式:

vints[i].sort([&words](int i, int j) { return words[i] < words[j]; });

使用std::bind:

#include <functional>

//...
{
using namespace std::placeholders;
vints[i].sort(std::bind(&myClass::sortFunc, this, _1, _2));
}

关于C++ 标准列表使用自定义比较器排序,该比较器取决于对象实例的成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8372918/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com