使用 C++ 集查找目标之前的元素

Find element that goes before target with C++ set

我知道有 lower_boundupper_bound 方法都可以找到不在目标元素之前的第一个元素,包括和排除目标。但是我需要一种方法可以找到 before 目标的最后一个元素。有没有这样的方法或简单的方法可以使用 set?

谢谢!

你可以减少下限吗?

通常您需要检查下界是否产生 begin() 迭代器,在这种情况下您提到的元素不存在。

下面是一些示例代码(未经测试,仅供参考):

template<typename T>
std::set<T>::iterator get_last_before(std::set<T> & s, const T & t) {
    auto it = s.lower_bound(t);
    if (it == s.begin()) { throw std::runtime_error(); }
    return --it;
}