首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++排序方法

C++排序方法
EN

Stack Overflow用户
提问于 2010-04-27 06:15:15
回答 5查看 1.5K关注 0票数 1

我想使用std::sort对一个向量进行排序,但我的sort方法是一个类的静态方法,我想在它外部调用std:: sort,但这样做似乎有问题。

在班级上:

代码语言:javascript
复制
static int CompareIt(void *sol1, void *sol2) { ... }

std::sort调用:

代码语言:javascript
复制
sort(distanceList.at(q).begin(), 
     distanceList.at(q).end(), 
     &DistanceNodeComparator::CompareIt);

难道不可以这样做吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-04-27 06:53:05

正如其他人所提到的,it needs a boolean return type。下面是一个有效的例子:

代码语言:javascript
复制
#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真正实现的知识,就很难给出更好的例子了!

票数 0
EN

Stack Overflow用户

发布于 2010-04-27 06:19:07

std::sort接受一个比较器,该比较器接受集合中保存的类型的值,并返回bool。它通常应该实现一些<的概念。例如,假设您的distanceList元素有整数集合(我假设它们没有,但为了示例的缘故):

代码语言:javascript
复制
static bool CompareIt(int sol1, int sol2) { ... }

当然,如果还没有为您的场景做正确事情的<运算符,那么您只需要提供一个比较器。

票数 4
EN

Stack Overflow用户

发布于 2010-04-27 06:19:17

它应该是一个布尔方法(sort默认使用运算符<()来比较值)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2717297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档