1

ペアを含むベクトルを取得しました。私のペアにはテンプレートパラメータがあります。

std::vector<std::pair<T1, T2> > myVector;

myVectorをペアの2番目のデータタグで並べ替えたいので、「キー」(T1)ではなく「値」(T2)で並べ替えます。私はここで私がこの甘い方法を使うことができるのを見ました:

std::sort(myVector.begin(), myVector.end(), mySortingFunc);

これは私のsortFuncです:

bool mySortingFunc (std::pair<T1, T2> pair1,   std::pair<T1, T2> pair2){ 
     return (pair1.second<pair2.second); 
}

コンパイルされていないので、10キロメートルの長さのエラーが発生します。(私はg ++を使用します)これをどのように行うべきですか?

  • 編集:

実際のコード:

template<typename T1, typename T2>
class OrderedMMap
{

std::vector<std::pair<T1, T2> > myVector;

public:

bool sortFunc (std::pair<T1, T2> pair1,   std::pair<T1, T2> pair2) { 

    return (pair1.second<pair2.second); 
}

void sortIt()
{
    std::sort(myVector.begin(), myVector.end(), sortFunc);
}
};
4

1 に答える 1

4

あなたsortFunc非静的メンバー関数です。それは問題。非静的メンバー関数は、クラスのオブジェクトでのみ呼び出すことができます。std::sortあなたのためにそれをすることはできません。

簡単な修正は、関​​数を作成することですstatic

static bool sortFunc (std::pair<T1, T2> pair1,   std::pair<T1, T2> pair2) { 
    return (pair1.second<pair2.second); 
}

キーワードを使用staticすると、クラスインスタンスなしで呼び出すことができる通常の関数と同じようになり、これで機能するようになりましたstd::sort

関数がconst参照によって引数を受け入れるとよいでしょう。

static bool sortFunc(std::pair<T1,T2> const& p1,std::pair<T1,T2> const& p2) 
{ 
    return p1.second < p2.second; 
}

お役に立てば幸いです。

于 2013-01-27T13:08:13.727 に答える