提问人:Damir Tenishev 提问时间:11/11/2023 最后编辑:Damir Tenishev 更新时间:11/11/2023 访问量:59
std::equal_range可能的实现
std::equal_range possible implementation
问:
std::equal_range 显示了以下可能的实现:std::equal_range
template<class ForwardIt, class T>
std::pair<ForwardIt, ForwardIt>
equal_range(ForwardIt first, ForwardIt last, const T& value)
{
return std::make_pair(std::lower_bound(first, last, value),
std::upper_bound(first, last, value));
}
是否有特定的原因可以重新开始而不是使用 的结果?first
std::upper_bound
std::lower_bound
例如:
template<class ForwardIt, class T>
std::pair<ForwardIt, ForwardIt>
equal_range(ForwardIt first, ForwardIt last, const T& value)
{
ForwardIt lower = std::lower_bound(first, last, value);
return std::make_pair(lower, std::upper_bound(lower, last, value));
}
在我看来,再次检查范围 [首先,更低]似乎太过分了,因为无论如何都应该在另一部分。upper
我知道 en.cppreference.com 提供了最简单的示例来解释算法背后的想法,而不是可能很复杂的优化版本。我的问题不同。我可以使用我的优化还是错过了一些拐角点?比如“考虑你的实现会在空数组上做什么,或者如果范围缺失,等等”。
我是否遗漏了什么,这种简单的优化可能会有风险?
我不是在尝试实现最佳性能(就像在 libstdc++ 实现中一样), 我只是好奇这个简单的优化是否安全。
答: 暂无答案
评论
make_pair
return {lower,whatever};