私はこのような構造体を持っています、
struct Foo {
int a;
};
このような構造体のベクトルがあります。
vector<Foo> foos;
すべての は、STL の sort() 関数を使用しFoo
て、整数a
で昇順にソートされます。ここで、STL の lower_bound() 関数のように、特定の数値以下Foo
のメンバー フィールドを持つオブジェクトを取得したいと考えています。a
問題は、STL の lower_bound 関数宣言が次のようになっていることです。
template <class ForwardIterator, class T, class Compare>
ForwardIterator lower_bound ( ForwardIterator first, ForwardIterator last,
const T& value, Compare comp );
だから私は何かをしたいのですが、
lower_bound(foos.begin(), foos.end(), 5, custom_comp);
探している int (この場合は 5) がタイプではないため、できませんFoo
。この問題は、lower_bound()、upper_bound()、および binary_search() で発生しています。custom_comp は順序付けのみを定義し、a = 5 のオブジェクトが実際に int 5 に等しいことを定義しません。
STLでこれを行うエレガントな方法はありますか?
編集:
私の例が私の問題を完全に表しているわけではないことに気付きました。私が実際に持っているのは、Foo には a と b の 2 つの int が含まれているということです。lower_bound を呼び出すと、b にアクセスできません (気にしないため)。billz の回答の問題はa
、パラメーターとしてのみ受け取るコンストラクターを定義する必要があることです。これは、私の意見ではあまりエレガントではありません (b は未定義または任意のままであり、このコンストラクターはコード)。しかし、これが唯一の選択肢である場合、私はそれを取ります。