3

CMP

bool cmp(const pair<string, long> &p1, const pair<string, long> &p2){
if(p1.second!=p2.second)
return p1.second < p2.second;
return strcmp(p1.first.c_str(),p2.first.c_str()); }

大家好,

我正在尝试vector根据second. pair如果对的元素second相等,那么我比较.firstpair

我正在使用上面的代码对vector包含的stringand进行排序int pair。我正在使用sort_heap(vector.begin(),vector.end(),cmp);. 但这似乎没有按预期工作。

4

1 回答 1

8

只需operator<用于字符串:

bool cmp(const pair<string, long> &p1, const pair<string, long> &p2)
{
    if(p1.second!=p2.second)
        return p1.second < p2.second;
    return p1.first < p2.first;
}

如果第一个“小于”第二个(这就是您所关心的),strcmp 返回一个负数,如果它们相等,则返回 0,如果第二个小于第一个,则返回一个正数。所以,如果你想使用 strcmp,你可以这样做:

return strcmp(p1.first.c_str(), p2.first.c_str()) < 0;

但我不明白你为什么要那样做。

于 2012-08-11T18:46:24.303 回答