2

STL を使用しないコードをリファクタリングして、STL が提供する汎用アルゴリズムを使用しようとしています。私はこのような構造体を持っています:

struct A {
int i;
//other stuff...
};
// ...
A* array; // array of A objects, sorted by A::i member
int n = ...; // array size

A次に、nと整数を受け取るコード化された関数がありk、その目的は、iメンバが に等しい配列の最初と最後の要素へのポインタを与えることですk

これは、バイナリ検索の観点から手動で実装されます。を使おうと考えていstd::equal_rangeました。i問題は、タイプ A のオブジェクトが機能する必要があり、メンバーが に等しい「ダミー」の A オブジェクトを導入する必要があることkです。

「ダミー」オブジェクトを導入することなく、STL を使用してこれを行う方法はありますか? ありがとう

4

3 に答える 3

1

また、通常、二分探索にstd::binary_search()defined inを使用することもできます。<algorithm>プロトタイプは次のとおりです。

template <class ForwardIterator, class T>
  bool binary_search (ForwardIterator first, ForwardIterator last,
                      const T& val);

また:

template <class ForwardIterator, class T, class Compare>
  bool binary_search (ForwardIterator first, ForwardIterator last,
                      const T& val, Compare comp);
于 2013-09-11T19:50:40.113 に答える
0

変換演算子を定義できます(これはハックに似ていると思います)

class A
{
    private:
        int i;
    public:
        A(int x) : i(x){}
        operator int(){
            return i;
        }
};

これが完了したら、構造体で operator< を定義する必要はありません。

于 2013-09-11T20:14:14.580 に答える