std::map 的 `[]` 运算符是否总是将新项放入迭代器的第一位?

Does operator of `[]` of std::map always put the new item into the first place of iterator?

您好,我遇到了一个与运算符 [].

在 std::map 中插入值的迭代器顺序相关的问题

代码是第265行的github programmany_async_rules[rstval].insert(sync_level);

地图的定义是std::map<RTLIL::SigSpec, std::set<RTLIL::SyncRule*>> many_async_rules;

通过测试案例并猜测其含义,此行应将 rstval 插入到 many_async_rules 的第一个迭代器槽中。

然而,在我的机器中它实际上把 rstval 放到最后一个。

所以我想问一下std::map这是否正常??

以下是我电脑的一些系统信息:

[shore@shore-82b6 yosys]$ gcc --version
gcc (GCC) 11.2.0
Copyright © 2021 Free Software Foundation, Inc.
[shore@shore-82b6 yosys]$ cat /etc/lsb-release
DISTRIB_ID=ManjaroLinux
DISTRIB_RELEASE=21.2.6
DISTRIB_CODENAME=Qonos
DISTRIB_DESCRIPTION="Manjaro Linux"

需要任何额外信息,请发表评论。

std::map 的元素按照提供给映射的 Compare 谓词建立的键的顺序存储(默认情况下,std::less)。如果根据谓词 rstval 是最小键,那么它将是第一个元素。如果根据谓词 rstval 是最大键,那么它将是最后一个元素。

Which means that if the key is a pointer, then the order is not sure??

如果键是一个指针,谓词是std::less,并且如果指针指向一个数组的元素,则顺序与该数组中指向的元素的顺序相同。但是如果指针不是指向数组的元素,那么它们的相对顺序是未指定的。