我发现,与我的预期和文档相反,MSVC的std::unordered_map
和std::unordered_multimap
(以及无序集)提供了lower_bound
和upper_bound
。
这些成员函数是做什么的?有文档吗?
我在C++20模式下尝试了MSVC 2019和2022;以下似乎是汇编:
#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条答案
按热度按时间dojqjjoe1#
它是一个非标准的扩展,只是为了兼容性。它已被弃用,并有以下警告:
hash_meow和unordered_meow容器的非标准lower_bound()成员是为了与有序关联容器的接口兼容而提供的,但与hash_meow或unordered_meow容器的语义不匹配。请改用find()成员。可以定义_SILENCE_STDEXT_HASH_LOWER_BOUND_DEPRECATION_WARNING来取消显示此警告。
来自yvals_core. h(
upper_bound
有类似的警告)。在VS17.5上使用
/std:c++20
时,您的代码实际上没有为我编译,因为我收到了上面的“警告”(这对我来说实际上是一个错误)。至于它实际上做什么,
lower_bound
与调用find
是一样的;upper_bound
稍微复杂一些,但仍然尝试使用_Find_last
(用于哈希类型对象的内部MS函数)查找键之后的下一个元素