我有一个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,这就是我放弃数据的原因(真的很愚蠢我以前没看过它)
答案 0 :(得分:1)
代码本身看起来很好。但是,由于您要从字符串键映射到整数,因此您可能会有多个具有相同值的键。
来自null
的文档:
只有在容器中没有其他元素具有与被放置的元素等效的键时(地图容器中的键是唯一的),才会进行插入。
因此,如果第一张地图中的很多条目具有相同的值(这是第二张地图中的关键字),那么您的数据集将会减少很多。
如果您需要保留这些元素,那么emplace
就不是正确的容器。
答案 1 :(得分:1)
这很可能是因为int
值之间存在重复。尝试将map<int, string>
替换为multimap<int, string>
。