订购unordered_map c ++时丢失数据

时间:2016-05-01 20:01:36

标签: c++ dictionary unordered-map

我有一个unordered_map<string, int> freq,我命令它将其转换为 map<int,string> freq2。我使用下一个函数来做到这一点:

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,这就是我放弃数据的原因(真的很愚蠢我以前没看过它)

2 个答案:

答案 0 :(得分:1)

代码本身看起来很好。但是,由于您要从字符串键映射到整数,因此您可能会有多个具有相同值的键。

来自null的文档:

  

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

因此,如果第一张地图中的很多条目具有相同的值(这是第二张地图中的关键字),那么您的数据集将会减少很多。

如果您需要保留这些元素,那么emplace就不是正确的容器。

答案 1 :(得分:1)

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