0

次のように、任意のコンパレータを使用してテンプレート型 QList 内のテンプレート型要素を検索できる、テンプレートのバイナリ検索アルゴリズムを書きたいと思います。

template<typename T,typename compare_less>
static int binary_search(QList<T>* list, T target) {
    int low = 0;
    int high = list->count()-1;
    while (low <= high) {
        int middle = low + (high - low)/2;
        if (compare_less(*target, *list[middle]))
            high = middle - 1;
        else if (compare_less(*list[middle],*target))
            low = middle + 1;
        else
            return middle;
    }
    return low;

}

QDateTime* テンプレート パラメーターで動作させるために、これを正しく実装するにはどうすればよいですか? 次のように関数を呼び出したいと思います。

int index = binary_search<QDateTime*, ???>(dateTimeList,date);

dateTimeList は QList 型で、date は QDateTime* 型で、クエスチョン マークの代わりに何を書けばよいかまったくわかりません。

誰かがアルゴリズムを正しく実装するのを手伝ってくれて、これらの引数でアルゴリズムを呼び出す方法を教えてくれますか?

4

1 に答える 1

6

Qt のドキュメントが有効であれば、何も実装する必要はありません。リストの .begin() と .end() で std::binary_search を使用するだけです。コンパレータを実装する必要がある場合は、そうして STL アルゴリズムに渡します。

于 2012-12-12T16:37:40.743 に答える