我有一个看起来像这样的结构,
struct Foo {
int a;
};
我有一个看起来像这样的结构的向量,
vector<Foo> foos;
所有的Foo
s 都使用 STL sort() 函数按整数a
升序排序。现在我想获取Foo
成员字段a
小于或等于给定数字的对象,例如 STL lower_bound() 函数。问题是 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)不是 type Foo
。我遇到了lower_bound()、upper_bound() 和binary_search() 的问题。custom_comp 只定义了排序,并没有定义 a = 5 的对象实际上等于 int 5。
用 STL 有什么优雅的方法吗?
编辑:
我意识到我的例子并不能完全代表我的问题。我实际上拥有的是 Foo 包含两个整数,a 和 b。当我调用lower_bound 时,我无权访问b(因为我不关心它)。现在 billz 答案的问题是我必须定义一个仅a
作为参数的构造函数,这在我看来不是很优雅(因为 b 未定义或任意,并且此构造函数可以在任何地方使用)代码)。但如果这是唯一的选择,我会接受。