多重映射是否保证广告顺序与其初始值设定项中给出的元素顺序匹配
Does multimap guarantee that insertion order matches the order of elements given in its initializer?
如果我这样做:
#include <map>
#include <iostream>
int main()
{
std::multimap<char, int> m;
m.emplace('a', 100);
m.emplace('b', 200);
m.emplace('b', 201);
m.emplace('c', 300);
for (const auto& p : m)
std::cout << p.first << 't' << p.second << 'n';
}
然后,从 C++11 开始,我保证值为 200
的元素将位于值为 201
的元素之前。
但是,如果我这样做呢?
#include <map>
#include <iostream>
int main()
{
std::multimap<char, int> m{
{'a', 100},
{'b', 200},
{'b', 201},
{'c', 300}
};
for (const auto& p : m)
std::cout << p.first << 't' << p.second << 'n';
}
我们是否保证"广告顺序"与初始化器中元素的顺序匹配?
快速测试给出了令人鼓舞的结果,但并不能真正证明任何事情。
我正在写C++17。
(我可以使用复合键切换到std::map
,但我有数千个由通用接口管理的东西,只有少数包含重复键,所以我对引入整体复杂性犹豫不决。
[associaciative.reqmts]:
。i 和 j 满足 输入迭代器需求并引用可隐式转换为value_type的元素,[i, j) 表示 有效范围...il 指定类型为
initializer_list<value_type>
的对象...Expression Assertion/note pre-/post-condition X(i,j,c) Effects: Constructs an empty container and inserts elements from the range [i, j) into it; uses c as a comparison object. X(i,j) Effects: Same as above, but uses Compare() as a comparison object. X(il) same as X(il.begin(), il.end())
因此,效果相同,从初始化器列表构造时排序保证与插入一系列迭代器时相同。
作为输入迭代器,范围通常不能无序迭代。
相关文章:
- 为什么用户定义的函数不按照给定的顺序对相同长度的元素进行排序?
- 快速排序 - 三个中位数枢轴选择 - 某些元素顺序不正确
- 序列容器 - 只能按顺序访问元素
- 如何检查 2 个 c++ 数组在 O(1) 或 O(log n) 时间复杂度中是否相同(所有元素都相同,顺序很重要)?
- 保留从一个多集复制到另一个多集的元素的顺序
- 如何在 C++ 中将从文本文件中读取的元素推送和弹出到数组中,并按 Revserse 顺序输出堆栈?
- 查找数组的第一个和最后一个索引,其中 from 和 to 元素的顺序总和最大
- 编写一个递归功能,该功能采用数组并以相反顺序显示元素,而无需在末尾启动数组的索引
- 编写链接函数的更短/更有效的方法,该函数按字典顺序添加新元素
- stable_sort不遵守元素的顺序
- 从容器中获取随机元素,该容器在恒定时间内没有严格的元素顺序
- 如何在默认和二维数组中找到顺序扩大元素的位置
- 多重映射是否保证广告顺序与其初始值设定项中给出的元素顺序匹配
- 调用std::nth_element后第n个元素之前的元素顺序
- 控制地图中元素的顺序
- 指针集中元素的顺序
- 一种按排序顺序保持元素的数据结构,支持快速插入和计算连续元素之间的最大差异
- 双向循环列表中的赋值运算符以错误的顺序添加元素
- 更改STL多集中两个相等元素的顺序
- 初始值设定项列表中元素的求值顺序