保持一对对的降序排列

时间:2019-02-23 11:33:17

标签: c++ set

我正在尝试根据以下逻辑将set<pair<ll,pair<ll,ll> > > st的元素按降序排列:

bool comp(pair<ll,pair<ll,ll> > a, pair<ll,pair<ll,ll> > b){
    if(a.first!=b.first)
        return a.first > b.first;
    return a.second.first > b.second.first;
}

使用set<pair<ll,pair<ll,ll> > , comp> st;

声明集合时

它出现以下错误:

error: template argument for template type parameter must be a type

通常在对向量进行排序时,我们会做:sort(v.begin(),v.end(),comp) 假设v是...的向量 pair<ll,pair<ll,ll> >

这两种情况有何不同?我应该如何正确执行逻辑?

1 个答案:

答案 0 :(得分:0)

与其定义comp函数,不如使用struct comp定义operator(),其逻辑与您的函数相同,但是请记住,它必须是const运算符。

struct comp{
    bool operator () (pair<ll,pair<ll,ll> > a, pair<ll,pair<ll,ll> > b) const {
        if(a.first!=b.first)
            return a.first > b.first;
        return a.second.first > b.second.first;
    }
}