通过重载<自定义对象的矢量排序

Mat*_*att 3 c++ sorting overloading vector

我正在尝试对节点矢量进行排序.我按照这个线程的建议并重载了我的
struct的<运算符.但是,在调用sort之后,我没有得到排序列表.

struct node
{

    int frequency ;
    char data;

    bool operator < (const node& n1) const
    {
        return (frequency < n1.frequency);
    }
};
Run Code Online (Sandbox Code Playgroud)

我通过以下方式调用sort:

vector<node*> test
//fill test with nodes
sort(test.begin(),test.end());
Run Code Online (Sandbox Code Playgroud)

输出:

Presort data is: 1,1,2,3,3,1,2,1,1
Postsort data is: 3,2,1,1,1,1,2,1,3
Run Code Online (Sandbox Code Playgroud)

das*_*ght 6

由于您正在对指针向量进行排序,但运算符适用于a struct,C++会忽略您的运算符<重载.

您可以提供一个自定义比较器来调用您operator <,就像这样

std::sort(test.begin(), test.end(), [](const node* pa, const node* pb) {
    return (*pb) < (*pa);
});
Run Code Online (Sandbox Code Playgroud)

或者将比较直接编码到lambda中,并删除未使用的重载<,如下所示:

std::sort(test.begin(), test.end(), [](const node* pa, const node* pb) {
    return pb->frequency < pa->frequency;
});
Run Code Online (Sandbox Code Playgroud)