Unordered_map和Unordered_set在MSVC++和g++编译器

发布于 2025-01-25 21:39:08 字数 407 浏览 2 评论 0原文

Unordered_map和Unordered_set在MSVC ++和G ++编译器中的工作方式不同。 插入顺序在MSVC ++中正确维护,但在G ++中不正确维护,

unordered_set<char> uset;
uset.emplace('b');
uset.emplace('a');
uset.emplace('d');
uset.emplace('c');
for (auto it : uset) {
    cout << it << " ";
}

上面的代码在Windows上使用MSVC ++在Windows上打印BADC,其中使用GCC(G ++)在Linux上打印CDBA。 哪个是正确的? 我很长时间以来一直是Windows开发人员,只是惊讶地看到了Linux上的结果。

unordered_map and unordered_set are working differently in MSVC++ and G++ compilers.
The insertion order is maintained properly in MSVC++ but not in g++

unordered_set<char> uset;
uset.emplace('b');
uset.emplace('a');
uset.emplace('d');
uset.emplace('c');
for (auto it : uset) {
    cout << it << " ";
}

The above code prints b a d c on windows with MSVC++ where as prints c d b a on linux using GCC(g++).
Which is correct?
I am a windows dev for long time, just surprised looking at results on linux.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

浅语花开 2025-02-01 21:39:08

According to https://en.cppreference.com/w/cpp/container/unordered_set , the order depends on the hash function, that might be different in different implementations.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文