MSVC 的 unordered_map::lower_bound 是什么?

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

我发现,与我的预期和文档相反,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;
}
c++ visual-c++ stl
1个回答
2
投票

这是仅出于兼容性目的的非标准扩展。它已被弃用并有以下警告:

hash_meow 和 unordered_meow 容器的非标准 lower_bound() 成员被提供用于与有序关联容器的接口兼容性,并且与 hash_meow 或 unordered_meow 容器的语义不匹配。请改用 find() 成员。您可以定义 _SILENCE_STDEXT_HASH_LOWER_BOUND_DEPRECATION_WARNING 来抑制此警告。

来自 yvals_core.h(

upper_bound
有类似的警告)。

你的代码实际上没有为我编译,在 VS 17.5 上使用

/std:c++20
,因为我收到上面的“警告”(这对我来说实际上是一个错误)。

至于它实际做了什么,

lower_bound
和调用
find
是一样的;
upper_bound
有点复杂,但仍然尝试使用
_Find_last
(散列类型对象的内部 MS 函数)找到键后的下一个元素

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