"std::multimap"是否保证每个键的实际值在相等范围内?
Does `std::multimap` guarantee actual value of each key in equal range?
C++"26.4.5.1 类模板多映射概述"p1 的标准 说:
多重映射是支持等效键(可能包含多个副本)的关联容器 相同的键值),并提供基于键的另一种类型 T 的值的快速检索。
重点是我的。那么这是否意味着std::multimap
在插入相等范围时可能不会保留原始键对象的副本并将其替换为相等的 1?
PS 为了明确这个问题的灵感,这个问题的灵感来自这个 多重映射的每个元素是否同时包含键和值? 我想知道多映射是否允许这样做,即我可以依靠它来维护我的密钥的能力(可以相等但不相同)。
No.该标准描述了如何在此表中插入元素。例如,a_eq.emplace(args)
的效果描述如下(强调我的)。
效果: 插入
t
std::forward<Args>(args)...
构造的value_type
对象,并返回指向新插入元素的迭代器。如果a_eq
中存在包含t
等效元素的区域,则t
将插入到该范围的末尾。
注意std::multimap<Key, T>
的value_type
是std::pair<const Key, T>
的,所以必须构造一个相同的(不仅是等效的)键。
不,不是这个意思。multimap
必须为每个元素都有一个与对象关联的键。以下是规范性措辞:
26.4.5.1:多重映射是支持等效键(可能包含同一键的多个副本)的关联容器 值)...
26.2.6:"键的等价性"一词是指比较对象强加的等价关系。也就是说,两个键 k1 和 k2 如果对于比较对象 comp, 则被视为等效, comp(k1, k2) == false && comp(k2, k1) == false.[ 注意:这不是 必然与 k1 == k2 的结果相同。— 尾注 ] 对于任何 两个键 K1 和 K2 在同一个容器中,调用 comp(K1, K2) 应 始终返回相同的值。
由于find
和朋友需要返回带有各自键的元素(也保留等效元素的相对顺序!),因此一致的多映射无法存储单个键。
- 为什么在全局范围内使用"extern int a"似乎不行?
- 错误:未在此范围内声明'reverse'
- 并行用于C++17中数组索引范围内的循环
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- 不计算一个范围内的完美数
- 错误:"imread"未在此范围内声明
- 我在范围内未声明的错误类有问题
- 如何在cpp中使用地图显示给定日期范围内(在下面的问题中)的费率?
- 我有一个数组,我想输入一个范围,然后找到范围内所有偶数的总和?
- 未在此范围内声明错误 'xy'
- 在C++中使用变量而不是"#define"来指定数组大小是不是一种糟糕的做法?(C错误:在文件范围内
- 命名空间范围内的外部 - GCC vs clang vs msvc
- 如何改进一堆在已知值范围内评估变量的 else-if 条件?
- 如何仅使用 While 循环在给定范围内找到可被 7 整除的计数整数
- Socklen_t未在此范围内声明
- 错误:'[' 之前预期的非限定 id 和错误:'users'未在此范围内声明
- 查找给定范围内最长连续 1 的频率
- "Main"已在当前范围内声明
- c++ 变量在宏的扩展中没有在这个范围内声明
- 变量不在 lambda 的范围内