2016-11-12 1 views
1

iはペアのベクトルを持っている:3番目のパラメータ(コンパレータ関数)を使用したオーバーロードされたsort()はどのように機能しますか?

vector<pair<char,int> > pAB; 

私は、ソート機能でそれを注文しました。私が昇順に並べ替えることにしたので、sort関数には3番目のパラメータがあります(booleanまたはbooleanを返す関数かもしれません)。そのために、あなたはこのsortbysec目的球を必要とする:

bool sortbysec(const pair<char,int> &a, 
     const pair<char,int> &b){ 
     return (a.second < b.second);} 

私はこの機能を使用する場合、私は、パラメータ送信する必要はありませんでした。私はこれが働いた理由を知りたい

sort(pAB.begin(),pAB.end(),sortbysec); 

を。

注:私はすでにインターネット上でそれを探すには、自動的にabの両方にペアを割り当てるもの

+1

"私は、パラメータを送信する必要はありませんでした。" - あなたはSTD 'に送信された第三 "もの" :: sort'ことを何と呼びますか?なぜ 'std :: sort(pAB.begin()、pAB.end())'(コードは表示されていません)がうまくいくのかを尋ねるなら、[std :: pairの 'operator <'オーバーロードデフォルトのコンパレータである['std :: less'](http:// en)が標準ライブラリによって提供されている<>'](http://en.cppreference.com/w/cpp/utility/pair/operator_cmp) .cppreference.com/w/cpp/utility/functional/less)、 – WhozCraig

+2

関数ポインタをルックアップします。 – Peter

答えて

1

sort機能を見つけることができませんでした。

使用する関数(ここではsortbysec)の戻り値の型はBooleanである必要があります。このように、それを定義することによって

(a.second < b.second)trueとき

bool sortbysec(const pair<char,int> &a, const pair<char,int> &b){ 
    return (a.second < b.second); 
} 

は、ベクター内のペアは、各ペアのsecond値に基づいて降順にソートされます。

More info

void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp); 

comp 
    Binary function that accepts two elements in the range as arguments, 
    and returns a value convertible to bool. The value returned indicates whether the 
    element passed as first argument is considered to go before the second in the specific 
    strict weak ordering it defines.The function shall not modify any of its arguments. 
    This can either be a function pointer or a function object. 
+1

私は質問が関数ポインタの存在に関するものだと思います:どのように関数自体をパラメータとして渡すことが可能ですか? –

関連する問題