繁体   English   中英

struct的排序向量上的lower和upper_bound

[英]lower and upper_bound on sorted vector of struct

比如说我有:

 struct my_stuff{
     long my_value;

     struct less_than{
           bool operator()(const my_stuff &a, const my_stuff &b){
                   return a.my_value < b.my_value;
     };
 };

在我的代码中,我有:

  vector<my_stuff> my_vec;

这个向量已经包含了我感兴趣的所有对象。然后我根据my_value成员变量对向量进行了排序

  sort(my_vec.begin(), my_vec.end(), my_stuff::less_than());

到目前为止一切都很好。 现在,根据成员变量“ my_value”对我的矢量对象进行排序。

我的问题/问题是:如何基于“ my_value”获得此向量的lower_bound和upper_bound。 例如,如果让我希望所有对象位于my_value的[low,high]范围内,则我希望lower_bound指向该bound(low)中的最低对象,而upper_bound指向我的high(高)。

到目前为止,我尝试过的是...

 auto low = lower_bound(myvec.begin()->my_value, my_vec.end()->my_value, val);

对于上限,除了“ upper_bound”而不是“ lower_bound”之外,还有相同的事情。 如何从句法上实现这一目标? 对对象的向量进行排序后,我想做的就是能够找到特定范围内的所有对象。 我相信lower_bound和upper_bound是解决此问题的正确方法,但是我对编写它感到困惑。 感谢您的帮助或指导!

有两种方法。 您可以构造一个包装了所需值的my_stuff实例,并将其传递给lower_bound

my_stuff test; test.my_value = val;
auto low = std::lower_bound(time_table.begin(), time_table.end(), test, 
                            my_stuff::less_than());

或者,在less_than::operator()添加几个重载,将my_stuff放在一边,另一边放在long的地方。 使用支持异构比较的比较器,您可以编写

auto low = std::lower_bound(time_table.begin(), time_table.end(), val,
                            my_stuff::less_than());

如果您实现my_stuff::operator<()而不是单独的比较器,则可以进一步避免将my_stuff::less_than()传递给std::lower_bound (并传递给std::sort my_stuff::operator<()有三个超载)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM