出于可读性考虑,我避免在复杂代码中使用 std::pair 以保持变量名称有意义。
考虑到std::equal_range返回迭代器的
std::pair
,使用结构化绑定以这种方式解包迭代器是否有效且安全:
而不是
auto it_lower = std::lower_bound(my_array.begin(), my_array.end(), val, comparator);
auto it_upper = std::upper_bound(my_array.begin(), my_array.end(), val, comparator);
使用
auto [it_lower, it_upper] = std::equal_range(my_array.begin(), my_array.end(), val, comparator);
接近?
忘记
equal_range
和lower_bound
/upper_bound
对可能的不同实现,只关注结构化捆绑的使用,从编译代码的表示和性能来看,这是否相等?我不是问编译后会做什么。我的问题是,如果我正确使用该工具,我可以期待类似的结果吗?或者有什么不同甚至更糟糕的陷阱?
我错过了什么还是这完全没问题?
auto [it_lower, it_upper] = std::equal_range(...
这是非常安全、有效的,是推荐的方法。
与像您展示的那样搜索整个范围的
lower_bound
和 upper_bound
相比,它还有可能更有效。