【问题标题】:How to do lower_bound on vector of objects如何在对象向量上做lower_bound
【发布时间】:2020-05-15 08:45:21
【问题描述】:

我想知道是否可以在对象向量上执行 lower_bound,但不重载 operator

【问题讨论】:

  • 没有operator<的时候是怎么排序的?
  • std::lower_bound 可以使用binary_op(而不是使用operator<
  • @idclev 463035818 好吧,我不完全是排序。我刚刚知道我的数据已排序,因为我已按确切顺序推送这些数据
  • @Jared42 我不确定我是否知道如何处理这些信息 - 抱歉;/
  • 那你就不需要lower_bound了,你推向量中的元素的时候就知道有多少元素小于零,简单的数一下

标签: c++ stl lower-bound


【解决方案1】:

类似这样的东西(未经测试的代码)

std::vector<int> nums { 1,2,3,4,5 };
auto res = std::lower_bound(nums.begin(), nums.end(), 3, [](const int& a, const int& b){ return a<b;});

【讨论】:

  • @Tojmak 这样 std::lower_bound 可以将向量中的元素与目标值 3 进行比较。
  • 好的,但为什么我必须给出“a”和“b”?我假设“a”是我的 nums 向量的元素,我想在您的示例中找到大于 3 的第一个值
  • 是的,但我将 lower_bound 3 作为参数。那么是不是我重新定义了与那个 lambda 比较的整体?我的意思是,例如“a”的值来自 nums 向量,而“b”的值为 3?
  • @Tojmak 是的,如果您将 int 与某些结构交换,那么这样做可能更有意义。
  • 但是如果我知道它是 3,那么我仍然必须给出“b”作为参数吗?我的意思是,我不能只做 { return a
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-29
  • 1970-01-01
  • 2022-01-25
相关资源
最近更新 更多