3

bool operator < (Class1& other);定義されたカスタムタイプ Class1 があります。 また、たとえば、アイテムを使用しているときに、メモリアドレスでソートされた
コンテナがあります。次に、実装することにしましたが、並べ替えは同じ方法で実行されます。QVector<Class1*> container;
qSort(container.begin(),container.end());bool operator < (Class1* other);

4

2 に答える 2

8

LessThan関数に関数qSort提供する必要があります。ドキュメントの例を次に示します。

void qSort ( RandomAccessIterator begin, RandomAccessIterator end, LessThan lessThan )

これはオーバーロードされた関数です。

operator<() の代わりに lessThan 関数を使用してアイテムを比較します。

たとえば、QStringList の文字列を大文字と小文字を区別せずにアルファベット順に並べ替える方法は次のとおりです。

 bool caseInsensitiveLessThan(const QString &s1, const QString &s2)
 {
     return s1.toLower() < s2.toLower();
 }

 int doSomething()
 {
     QStringList list;
     list << "AlPha" << "beTA" << "gamma" << "DELTA";
     qSort(list.begin(), list.end(), caseInsensitiveLessThan);
     // list: [ "AlPha", "beTA", "DELTA", "gamma" ]
 }
于 2013-05-24T14:23:38.850 に答える
0

呼び出しで独自のコンパレータを提供できるバリアントを使用します。

qSort(container.begin(),container.end(),
    [](const Class1* first, const Class1* second)
    { return first->operator<(*second); });
于 2013-05-24T14:23:59.420 に答える