33

std::sort() のカスタム比較関数を作成して、キーと値のペア std::pair をソートしたい

これが私の機能です

 template <typename K, typename V>
 int comparePairs(const void* left, const void* right){
        if((((pair<K,V>*)left)->first) <= (((pair<K,V>*)right)->first))
            return 1;
        else 
            return -1;
    }

次に、いくつかのクラス内に、ペア クラス メンバーのベクトルがあります。

vector<pair<K,V>> items;  

std::sort() を使用して、このベクトルをキーでソートする方法

std::sort(items.begin(), items.end(), comparePairs<K,V>);

内にコンパイル エラーがあります。

「パラメータ番号を 'std::pair<_Ty1,_Ty2>' から 'const void*' に変換できません」

. 間違いとは何ですか?

4

3 に答える 3

35

std::pairには、必要な比較演算子が既にあり、各ペアの両方の要素を使用して辞書式比較を実行します。これを使用するには、型Kおよびの型の比較演算子を指定するだけVです。

また、厳密な弱順序比較std::sortが必要であり、それを満たしていないことに注意してください。たとえば、 と の小なり比較が必要になります。それが整ったら、必要なのは<=<KV

std::vector<pair<K,V>> items; 
std::sort(items.begin(), items.end()); 

独自の比較関数を本当に提供する必要がある場合は、次のようなものが必要です。

template <typename K, typename V>
bool comparePairs(const std::pair<K,V>& lhs, const std::pair<K,V>& rhs)
{
  return lhs.first < rhs.first;
}
于 2013-06-03T10:34:22.680 に答える