linux系统中的std::unordered_multimap没有lower_bound
时间: 2023-11-11 08:22:35 浏览: 204
实际上,Linux系统中的std::unordered_multimap是符合C++标准的,应该是支持lower_bound操作的。lower_bound用于查找第一个大于或等于指定键值的元素的迭代器,应该是unordered_multimap中常用的操作之一。如果您在使用时发现lower_bound操作不存在,可能是您的代码中存在一些问题,例如未正确包含头文件或使用了错误的命名空间等。建议您检查一下代码,或者提供更具体的问题描述,以便我更好地帮助您解决问题。
相关问题
error: 'class std::unordered_multimap<std::__cxx11::basic_string<char>, QWidget*>' has no member named 'lower_bound' auto ite = m_mIdMapWidget.lower_bound(frame.m_sMemberID); ^~~~~~~~~~~
这个错误提示意味着你在 `std::unordered_multimap<std::__cxx11::basic_string<char>, QWidget*>` 类型的对象上调用了 `lower_bound` 函数,但该类型并没有名为 `lower_bound` 的成员函数。
`std::unordered_multimap` 类型的对象本身是支持 `lower_bound` 函数的,因此出现这个错误的原因可能是因为你的头文件或命名空间有误。
请确保在代码中包含了正确的头文件,并且在使用 `lower_bound` 函数时使用了 `std` 命名空间,例如:
```cpp
#include <unordered_map>
int main()
{
std::unordered_multimap<std::string, QWidget*> m_mIdMapWidget;
// 使用 lower_bound 函数
auto ite = m_mIdMapWidget.lower_bound("member_id");
// ...
}
```
如果你已经使用了正确的头文件和命名空间,但仍然遇到这个错误,请检查你的编译选项是否正确。如果使用了一些较旧的编译器,可能需要在编译时指定 `-std=c++11` 或更高版本的标准以支持 C++11 的新特性。
flat_multimap
flat_multimap 是一个用于存储键值对的容器,它允许多个键具有相同的值。与传统的 std::multimap 不同,flat_multimap 使用平衡二叉搜索树(如红黑树)而不是链表来实现。
这个容器的特点是,它将具有相同值的键按照键值的比较顺序进行排序,并且可以通过迭代器进行高效的查找、插入和删除操作。此外,flat_multimap 还提供了一些方便的成员函数,如 lower_bound、upper_bound 和 equal_range,用于在容器中查找特定键值的区间。
需要注意的是,flat_multimap 并不保证对键进行唯一化,即使具有相同值的键已经存在于容器中。因此,如果你需要确保每个键只出现一次,请考虑使用其他容器,如 std::set 或 std::unordered_set。
需要注意的是,flat_multimap 是 C++17 新增的容器类型,如果你使用的是更早版本的 C++ 标准库,可能需要使用其他替代方案或自行实现类似功能的容器。
阅读全文