使用结构化绑定声明来解包 std::equal_range 的结果

问题描述 投票:0回答:1

出于可读性考虑,我避免在复杂代码中使用 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
对可能的不同实现,只关注结构化捆绑的使用,从编译代码的表示和性能来看,这是否相等?我不是问编译后会做什么。我的问题是,如果我正确使用该工具,我可以期待类似的结果吗?或者有什么不同甚至更糟糕的陷阱?

我错过了什么还是这完全没问题?

c++ stl
1个回答
0
投票
auto [it_lower, it_upper] = std::equal_range(...

这是非常安全、有效的,是推荐的方法。

与像您展示的那样搜索整个范围的

lower_bound
upper_bound
相比,它还有可能更有效。

© www.soinside.com 2019 - 2024. All rights reserved.