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}}元素。
我正在使用上述代码对包含first
和pair
vector
的{{1}}进行排序。我正在使用string
调用排序函数。但这似乎没有按预期工作。
答案 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;
但我不明白你为什么会这样做。