gpt4 book ai didi

c++ - 使用 lower_bound、upper_bound 和 binary_search 查找具有相等成员字段的对象

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:55:35 26 4
gpt4 key购买 nike

我有一个看起来像这样的结构,

struct Foo {
int a;
};

我有一个看起来像这样的结构 vector ,

vector<Foo> foos;

所有 Foo 都使用 STL sort() 函数按整数 a 升序排序。现在我想获取成员字段 a 小于或等于给定数字的 Foo 对象,就像 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)不是 Foo 类型。我在使用 lower_bound()、upper_bound() 和 binary_search() 时遇到了这个问题。 custom_comp 仅定义顺序,并未定义 a = 5 的对象实际上等于 int 5。

使用 STL 有什么优雅的方法可以做到这一点吗?

编辑:

我意识到我的例子并不能完全代表我的问题。我实际拥有的是 Foo 包含两个整数 a 和 b。当我调用 lower_bound 时,我无权访问 b(因为我不关心它)。现在 billz answer 的问题是我必须定义一个只接受 a 作为参数的构造函数,在我看来这不是很优雅(因为 b 未定义或任意,并且这个构造函数可以在代码的任何地方使用)。但如果这是唯一的选择,我会接受。

最佳答案

你可以为你的结构 Foo 提供一个构造函数

struct Foo {
Foo(int x):a(x){
}
int a;
};

您现在可以调用:

std::lower_bound(foos.begin(), foos.end(), 5, custom_comp);

std::lower_bound(foos.begin(), foos.end(), Foo(5), custom_comp);

Foo f(5);
std::lower_bound(foos.begin(), foos.end(), f, custom_comp);

建议的方法是:

struct Foo {
explicit Foo(int x):a(x){
}
int a;
};

std::lower_bound(foos.begin(), foos.end(), Foo(5), custom_comp);

关于c++ - 使用 lower_bound、upper_bound 和 binary_search 查找具有相等成员字段的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13354556/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com