std::map 的 `[]` 运算符是否总是将新项放入迭代器的第一位?
Does operator of `[]` of std::map always put the new item into the first place of iterator?
您好,我遇到了一个与运算符 [].
在 std::map 中插入值的迭代器顺序相关的问题
代码是第265行的github program:many_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
,并且如果指针指向一个数组的元素,则顺序与该数组中指向的元素的顺序相同。但是如果指针不是指向数组的元素,那么它们的相对顺序是未指定的。
您好,我遇到了一个与运算符 [].
在 std::map 中插入值的迭代器顺序相关的问题代码是第265行的github program:many_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
,并且如果指针指向一个数组的元素,则顺序与该数组中指向的元素的顺序相同。但是如果指针不是指向数组的元素,那么它们的相对顺序是未指定的。