我想使用std::sort对一个向量进行排序,但我的sort方法是一个类的静态方法,我想在它外部调用std:: sort,但这样做似乎有问题。
在班级上:
static int CompareIt(void *sol1, void *sol2) { ... }std::sort调用:
sort(distanceList.at(q).begin(),
distanceList.at(q).end(),
&DistanceNodeComparator::CompareIt);难道不可以这样做吗?
发布于 2010-04-27 06:53:05
正如其他人所提到的,it needs a boolean return type。下面是一个有效的例子:
#include "stdafx.h"
#include <vector>
#include <algorithm>
using namespace std;
class MyClass
{
public:
static bool CompareIt(const void *a1, const void *a2)
{
return a1 < a2;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
// Create a vector that contains elements of type MyData
vector<void*> myvector;
// Add data to the vector
myvector.push_back((void*)0x00000005);
myvector.push_back((void*)0x00000001);
// Sort the vector
std::sort(myvector.begin(), myvector.end(), MyClass::CompareIt);
// Display some results
for( int i = 0; i < myvector.size(); i++ )
{
printf("%d = 0x%08X\n", i, myvector[i] );
}
return 0;
}编辑更新了上面的代码,使它变得更简单。我并不是说这是一个很好的代码,但是如果没有更多关于OPs真正实现的知识,就很难给出更好的例子了!
发布于 2010-04-27 06:19:07
std::sort接受一个比较器,该比较器接受集合中保存的类型的值,并返回bool。它通常应该实现一些<的概念。例如,假设您的distanceList元素有整数集合(我假设它们没有,但为了示例的缘故):
static bool CompareIt(int sol1, int sol2) { ... }当然,如果还没有为您的场景做正确事情的<运算符,那么您只需要提供一个比较器。
发布于 2010-04-27 06:19:17
它应该是一个布尔方法(sort默认使用运算符<()来比较值)
https://stackoverflow.com/questions/2717297
复制相似问题