Class std::在同一类中使用成员函数进行排序?

Class std::在同一类中使用成员函数进行排序?,class,sorting,member-functions,Class,Sorting,Member Functions,我有一个类“PclProc”,我想使用std::sort 我在同一个类中编写了一个比较函数,因为这个比较需要“in_ptr”,它是同一个类中的一个变量 但正如我所做的那样,总有一个错误: 错误:没有用于调用的匹配函数 '排序(std::vector::iterator,std::vector::iterator, )’ std::sort(cloud\u indicate.index.begin()、cloud\u indicate.index.end()、PclProc::MyCompare)

我有一个类“PclProc”,我想使用std::sort

我在同一个类中编写了一个比较函数,因为这个比较需要“in_ptr”,它是同一个类中的一个变量

但正如我所做的那样,总有一个错误:

错误:没有用于调用的匹配函数 '排序(std::vector::iterator,std::vector::iterator, )’ std::sort(cloud\u indicate.index.begin()、cloud\u indicate.index.end()、PclProc::MyCompare)

boolplproc::MyCompare(intid1,intid2)
{
返回_ptr->points[id1].zpoints[id2].z;
}
浮点PclProc::MedianZDist(pcl::点索引云索引)
{
std::sort(cloud\u indicate.index.begin()、cloud\u indicate.index.end()、PclProc::MyCompare);
int size=cloud_indice.index.size();
浮动中位数x,中位数y;
...

用于std::sort的函子示例。向量D是数据,向量I是指向D的索引。I使用函子根据D和std::sort进行排序。std::sort仅创建类lessthan的一个实例,然后将该实例用于所有比较

#include <algorithm>
#include <cstdlib>
#include <iostream>
#include <iomanip>
#include <vector>

typedef unsigned int uint32_t;

#define SIZE 16

class example{
public:
    std::vector<uint32_t> D;    // data
    std::vector<uint32_t> I;    // indices

example(void)
{
    D.resize(SIZE);
    I.resize(SIZE);
    for(uint32_t i = 0; i < SIZE; i++){
        D[i] = rand()%100;
        I[i] = i;
    }
}

void displaydata(void)
{
    for(size_t i = 0; i < SIZE; i++)
        std::cout << std::setw(3) << D[I[i]];
    std::cout << std::endl;
}

class lessthan                  // lessthan functor for std::sort
{
public:
const example &x;
    lessthan(const example &e ) : x(e) { }
    bool operator()(const uint32_t & i0, const uint32_t & i1)
    {
        return x.D[i0] < x.D[i1];
    }
};

void sortindices(void)
{
    std::sort(I.begin(), I.end(), lessthan(*this));
}
};

int main()
{
example x;
    x.displaydata();
    x.sortindices();
    x.displaydata();
    return 0;
}
#包括
#包括
#包括
#包括
#包括
typedef unsigned int uint32\u t;
#定义尺寸16
课例{
公众:
std::vector D;//数据
std::vector I;//索引
示例(无效)
{
调整大小;
I.调整大小(大小);
对于(uint32_t i=0;istd::cout std::sort不能与普通成员函数一起使用。可以使用函数运算符(functor)如果C++编译器支持lambda函数,那么lambda函数。以前有关于这个的线程,比如.@ rcGLDR谢谢。我的情况是C++ 11不可用。所以lambda函数不能使用。我知道函数操作符的超载。但是你能给我更多的提示如何写我的特例吗?
#include <algorithm>
#include <cstdlib>
#include <iostream>
#include <iomanip>
#include <vector>

typedef unsigned int uint32_t;

#define SIZE 16

class example{
public:
    std::vector<uint32_t> D;    // data
    std::vector<uint32_t> I;    // indices

example(void)
{
    D.resize(SIZE);
    I.resize(SIZE);
    for(uint32_t i = 0; i < SIZE; i++){
        D[i] = rand()%100;
        I[i] = i;
    }
}

void displaydata(void)
{
    for(size_t i = 0; i < SIZE; i++)
        std::cout << std::setw(3) << D[I[i]];
    std::cout << std::endl;
}

class lessthan                  // lessthan functor for std::sort
{
public:
const example &x;
    lessthan(const example &e ) : x(e) { }
    bool operator()(const uint32_t & i0, const uint32_t & i1)
    {
        return x.D[i0] < x.D[i1];
    }
};

void sortindices(void)
{
    std::sort(I.begin(), I.end(), lessthan(*this));
}
};

int main()
{
example x;
    x.displaydata();
    x.sortindices();
    x.displaydata();
    return 0;
}