用字符串和整数对排序矢量

时间:2012-08-11 18:43:05

标签: c++ stl

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的{​​{1}}元素对second进行排序。如果该对中的pair元素相等,则我会比较second的{​​{1}}元素。

我正在使用上述代码对包含firstpair vector的{​​{1}}进行排序。我正在使用string调用排序函数。但这似乎没有按预期工作。

1 个答案:

答案 0 :(得分: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;

但我不明白你为什么会这样做。