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基づいて並べ替えようとしています。ペアの要素が等しい場合は、の要素を比較します。secondpairsecondfirstpair

上記のコードを使用して、vector含むstringとを並べ替えてい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は、最初の数値が2番目の数値より「小さい」場合は負の数を返し(これで問題ありません)、等しい場合は0を返し、2番目の数値が最初の数値よりも小さい場合は正の数を返します。したがって、strcmpを使用する場合は、次のようにします。

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

しかし、なぜそうするのかわかりません。

于 2012-08-11T18:46:24.303 に答える