关于MSVC中std::unordered_map::lower_bound的功能及文档问询
MSVC无序容器的
lower_bound/upper_bound成员函数说明 作用说明
MSVC为std::unordered_map、std::unordered_multimap、std::unordered_set、std::unordered_multiset额外提供了lower_bound和upper_bound成员函数,这属于编译器的非标准扩展——C标准(包括C20)并没有要求无序容器实现这两个成员。
它们的行为逻辑和有序容器(比如std::map)的同名成员类似,但结合了无序容器的哈希特性:
lower_bound(key):返回指向容器中第一个等于key的元素的迭代器;如果没有匹配元素,返回end()。它会先通过哈希定位到对应桶,再在桶内查找,比全局std::lower_bound遍历整个容器的效率更高。upper_bound(key):返回指向容器中最后一个等于key的元素之后位置的迭代器;如果没有匹配元素,返回end()。同样是基于哈希桶定位后查找。
相关文档说明
微软的MSDN文档中明确标注了这些是Microsoft特定的扩展,你可以在MSVC标准库对应容器的成员函数列表里找到相关说明,比如std::unordered_map的文档页面会单独指出这两个函数是非标准实现。
验证代码示例
你提供的测试代码在MSVC 2019/2022的C++20模式下可正常编译运行:
#include <iostream> #include <unordered_map> int main() { std::unordered_map<int, int> m; m.emplace(1, 1); std::cout << m.lower_bound(1)->first; // 输出1 }
需要注意:这些成员函数是非标准的,若要编写跨编译器兼容的代码,不建议使用。对于唯一键的无序容器,可改用find;对于允许重复键的容器,可通过equal_range(标准支持)获取匹配元素的范围迭代器。
内容的提问来源于stack exchange,提问作者Filip Konvička
相关产品推荐
相关产品推荐

