c++ 什么是MSVC的无序Map::下界?

ryoqjall  于 2023-03-14  发布在  其他
关注(0)|答案(1)|浏览(207)

我发现,与我的预期和文档相反,MSVC的std::unordered_mapstd::unordered_multimap(以及无序集)提供了lower_boundupper_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;
}
dojqjjoe

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函数)查找键之后的下一个元素

相关问题