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

时间:2015-10-24 04:48:09

标签: c++ sorting vector overloading

我正在尝试对节点矢量进行排序。 我遵循this thread的建议并重载了我的 struct<操作 即可。但是,在调用sort之后,我没有得到排序列表。

struct node
{

    int frequency ;
    char data;

    bool operator < (const node& n1) const
    {
        return (frequency < n1.frequency);
    }
};

我通过以下方式调用sort:

vector<node*> test
//fill test with nodes
sort(test.begin(),test.end());

输出:

Presort data is: 1,1,2,3,3,1,2,1,1
Postsort data is: 3,2,1,1,1,1,2,1,3

2 个答案:

答案 0 :(得分:6)

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

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

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

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

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

答案 1 :(得分:0)

最简单的方法是使用lambdas:

sort(test.begin(),test.end(), [](const node &lhs, const node &rhs){return lhs->frequency < rhs->frequency;});