gpt4 book ai didi

c++ - 在 C++ 中使用对象的成员进行排序

转载 作者:搜寻专家 更新时间:2023-10-31 01:19:37 29 4
gpt4 key购买 nike

我想使用 sort() 来做以下事情

  • 我有一个文本 char[] T,它是一个类的(私有(private))成员。文本的长度为 n。
  • 我还有一个包含前 n 个整数的数组 int[] P。

我想对 std::sort P 进行排序,以便保留 T 后缀之间的字典顺序即,对于任何 i < j我们有T[P[i]...n] lex 是否小于 T[P[j]...n] .

我可以在 char[] T 时完成是一个全局变量,通过定义

bool myfunction (int i,int j) { 
int m = i, l = j;
while(m<n and l <n) {
if(T[m] != T[l]) return (T[m]<T[l]);
m++; l++;
}
return (m<l);
}

并调用 std::sort(P, P+n, myfuction)

我遇到麻烦了 T是对象的成员(并且排序由该对象的方法调用)。

如何定义 myfunction这样T可见吗?它应该是那个对象的成员吗?如果是,如何?非常感谢。

编辑:bool 而不是 int

最佳答案

如您所料,一种方法是将 yourfunction() 定义为该类的公共(public)成员。

例子:

#include <algorithm>
#include <vector>

using namespace std;

class T
{
private:
int value;
public:
T()
{
value = rand() % 100;
}

static bool Compare(const T &a, const T &b)
{
return a.value < b.value;
}
};

int main(int argc, char** argv)
{
vector<T> data;

//add some data
for (int i=0; i<10; i++)
data.push_back(T());

//sort using static method that can access private attributes
std::sort(data.begin(), data.end(), T::Compare);
}

关于c++ - 在 C++ 中使用对象的成员进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5879998/

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