如果我这样做:
#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';
}
……然后,
since 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';
}
我们是否保证“插入顺序”与初始化器中的元素顺序匹配?
A quick test
结果令人鼓舞,但并不能证明什么。
我正在写C++ 17。
(我可以切换到
std::map
有了一个复合键,但我有成千上万的这些东西是由一个公共接口管理的,只有少数包含重复的键,所以我不想全面介绍这种复杂性。)