c++ - 标准要求 std::unordered_map 将键值对放在内存中吗?

标签 c++ c++11 language-lawyer unordered-map

C++ 标准是否强制要求符合要求的 std::unordered_map 将每个键和值放在内存中?

我认为答案是肯定的,因为大部分 std::unordered_map 都是根据 std::pair 指定的,而且我认为不需要隐藏的操作内存中不相交的键值对的细节可能会被完全隐藏,但我不确定。

最佳答案

标准要求 value_type对于 std::map::iteratorstd::pair<const key, T> ,因此(例如)当您使用迭代器遍历 map 时,每次取消引用迭代器时,您都会得到一个 pair<const key, T>。 .

该标准还要求(例如)emplace返回一个迭代器“到新插入的元素”。至少根据我的阅读,这意味着你不能让它彼此分开存储键和值,而只是(例如)将键/值复制到一个临时位置,这样它就可以返回一个指针/引用到那个按需定位。

后者会(例如)违反异常安全要求。它必须进行复制才能使集合中的元素可见,在不允许这样做的情况下,因为这样的复制可能会引发异常,但所讨论的函数不允许这样做(实际上,可以放置类型根本无法复制)。

关于c++ - 标准要求 std::unordered_map 将键值对放在内存中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34865362/

相关文章:

c++ - 在不创建任何类型对象的情况下声明 vector 和指针

c++ - "long int", "long long"数据类型

c++ - 如何在 std::shared_ptr<uint8_t> 之间设置/获取 unsigned char *?

c - C标准是否要求n个元素数组的大小是元素大小的n倍?

c++ - 什么是执行宽字符集及其编码?

c++ - 使用辅助方法操作字符串的范围问题

c++ - 即使片段 alpha 为 1.0,合成器也会混合 OpenGL

c++ - 在特定对象实例上调用 C++ 函数指针

c++ - 为什么带有括号 () 的数组初始化被编译器标记为错误?

c++ - 线程事件会在程序退出后自动关闭吗?