对一个无序映射c++进行排序时数据丢失

Loss of data while ordering an unordered_map c++

本文关键字:排序 数据 c++ 映射 无序 一个      更新时间:2023-10-16

我有一个unordered_map<string, int> freq,我命令它将其转换为CCD_ 2。我使用下一个功能来做到这一点:

map<int, string> order(unordered_map<string, int> x) {
    map <int, string> map;
    for (auto it = x.begin(); it != x.end(); ++it) {
        map.emplace(it->second, it->first);
    }
    return map;
}

unordered_map的大小是2355831,返回的map是505,所以正如你所看到的,数据的损失非常大,我不知道为什么。。。。知道为什么会发生这种事吗?

谢谢。

编辑:

感谢大家,你们都很好,我有很多相同值的int,这就是为什么我丢失了数据(从我的部分来看,以前没有看到它真的很愚蠢)

这很可能是因为int值之间存在重复。尝试用multimap<int, string>替换map<int, string>

代码本身看起来不错。然而,由于您正在从字符串键映射到整数,因此最好有多个具有相同值的键。

来自emplace:的文档

只有当容器中没有其他元素具有与要放置的元素等效的键(映射容器中的键是唯一的)时,才会进行插入。

因此,如果你在第一个映射中的很多条目都有相同的值(这是第二个映射的关键),那么你的数据集就会减少很多。

如果需要保留这些元素,那么std::map不是合适的容器。