时间轴
时间轴
2025-09-20
init
std::set std::distance std::lower_bound std::upper_bound
题目:
这题很容易超时,主要是因为这个时间本来就是有序的,如果认为是无序的那么基本就超时了,比如用 multiset 存 timestamp 以求其有序,但实际上用简单的 vector 存就行。
注意 std::distance 这个函数,有的迭代器不支持减法只能用这个求其距离
注意 std::set 如果存入 class 或者 struct 那么得实现比较的 operator,因为 set 是有序的
- std::lower_bound
- 作用: 返回第一个 大于等于 (>=) 指定值的元素的迭代器。 - 如果值存在: 返回该值的第一个位置。 - 如果值不存在: 返回比目标值 大的第一个元素 位置。 - 如果所有元素都小于目标值: 返回 end() 迭代器。
反向查找小于目标值的元素: std::lower_bound 返回的迭代器减一,即 std::lower_bound(vec.begin(), vec.end(), target) - 1。
- 作用: 返回第一个 大于等于 (>=) 指定值的元素的迭代器。 - 如果值存在: 返回该值的第一个位置。 - 如果值不存在: 返回比目标值 大的第一个元素 位置。 - 如果所有元素都小于目标值: 返回 end() 迭代器。
- std::upper_bound
- 作用: 返回第一个 大于 (>) 指定值的元素的迭代器。 - 如果值存在: 跳过所有相同值,返回比目标值 大的第一个元素 位置。 - 如果值不存在: 返回比目标值 大的第一个元素 位置。 - 如果所有元素都小于等于目标值: 返回 end() 迭代器。
反向查找小于等于目标值的元素: std::upper_bound 返回的迭代器减一,即 std::upper_bound(vec.begin(), vec.end(), target) - 1。
- 作用: 返回第一个 大于 (>) 指定值的元素的迭代器。 - 如果值存在: 跳过所有相同值,返回比目标值 大的第一个元素 位置。 - 如果值不存在: 返回比目标值 大的第一个元素 位置。 - 如果所有元素都小于等于目标值: 返回 end() 迭代器。
注意 写 operator<时
- 参数必须是 const Movie&(不能接受非 const 引用)
- 函数本身必须是 const(不会修改 *this)
1 |
|
