有一个std::map<int,int> map,first是开始时间 second是结束时间,输入一个时间,判断输入的时间是否在开始时间和结束时间之内
时间: 2023-05-23 10:06:47 浏览: 64
A:
可以使用std::map的lower_bound函数和upper_bound函数来查找输入时间的位置,如果输入时间在开始时间和结束时间之间,则lower_bound的返回值应该小于等于输入时间,而upper_bound的返回值应该大于输入时间。
代码如下:
```c++
bool isInsideTime(const std::map<int,int>& map, int inputTime) {
auto it = map.lower_bound(inputTime); // 查找大于等于输入时间的第一个位置
if (it == map.end()) return false; // 找不到位置,输入时间在所有开始时间和结束时间之后,返回false
if (it->first == inputTime) return true; // 输入时间正好是某一条记录的开始时间,返回true
if (it == map.begin()) return false; // 输入时间比第一条记录的开始时间还早,返回false
--it; // 找到小于输入时间的最后一个位置
return (it->second >= inputTime); // 判断输入时间是否在当前位置的开始时间和结束时间之间
}
```
使用举例:
```c++
std::map<int,int> map {{10, 20}, {30, 40}, {50, 60}};
std::cout << std::boolalpha << isInsideTime(map, 5) << '\n'; // false
std::cout << std::boolalpha << isInsideTime(map, 10) << '\n'; // true
std::cout << std::boolalpha << isInsideTime(map, 25) << '\n'; // false
std::cout << std::boolalpha << isInsideTime(map, 50) << '\n'; // true
std::cout << std::boolalpha << isInsideTime(map, 70) << '\n'; // false
```
输出结果:
```
false
true
false
true
false
```
阅读全文