gpt4 book ai didi

c++ - 指向成员函数的指针 - C++ std::list 排序

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:53:08 32 4
gpt4 key购买 nike

如何将指向成员函数的指针传递给 std::list.sort()?

这可能吗?谢谢

struct Node {
uint32_t ID;
char * Value;
};

class myClass {
private:
uint32_t myValueLength;
public:
list<queueNode *> MyQueue;
bool compare(Node * first, Node * second);
bool doStuff();
}

bool myClass::compare(Node * first, Node * second) {
unsigned int ii =0;
while (ii < myValueLength)
{
if (first-> Value[ii] < second-> Value[ii])
{
return true;
} else if (first-> Value[ii] > second-> Value[ii])
{
return false;
}

++ii;
}

return false;
}

bool myClass::doStuff()
{
list.sort(compare);
}

我想在类中使用一个长度变量,而不是在比较函数中执行 strlen()(值将始终是相同的长度)

编辑:myValueLength 不是我想从比较函数中访问的唯一变量,我只是简化它以使示例更短。

最佳答案

详述grieve's响应,为什么不使用仿函数?例如:

struct Functor
{
bool operator()( char * a, char * b )
{ return strcmp(a,b) < 0; }
};

那么你可以使用:

Functor f;
myList.sort(f);

您甚至可以通过定义 operator() 将您的类用作 Functor...

class myClass {
...
bool operator()( queueNode * a, queueNode * b )
{ return compare( a, b ); }

void doStuff() { MyQueue.sort(*this); }
};

简单示例代码:

#include <iostream>
#include <list>
using namespace std;

// Assumes TYPE t; cout << t; is valid.
template<class TYPE>
inline ostream & operator<< ( ostream & theOstream,
const list<TYPE> & theList )
{
typename list<TYPE>::const_iterator listIterator = theList.begin();
for ( int i = 0; listIterator != theList.end(); listIterator ++, i ++ )
theOstream << " [" << i << "]: \"" << (*listIterator) << "\"" << endl;
return theOstream;
}

struct Functor
{
bool operator()( const char * a, const char * b )
{ return strcmp(a,b) < 0; }
};

int
main()
{
list<char*> l;

/* Load up some example test data... */
char s[3];
s[2] = '\0';
for ( s[0]='c'; s[0]>='a'; s[0]-- )
for ( s[1]='c'; s[1]>='a'; s[1]-- )
l.push_back(strdup(s));

/* Show us that test data... */
cout << l << endl;

/* Sort list. */
Functor f;
l.sort(f);

/* Show us what we have now... */
cout << l << endl;
}

关于c++ - 指向成员函数的指针 - C++ std::list 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/639100/

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