对一个无序映射c++进行排序时数据丢失
Loss of data while ordering an unordered_map c++
我有一个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
不是合适的容器。
相关文章:
- 如何对点云数据进行排序
- 如何使用 QSortFilterProxyModel::sort 对 Qlist 中的数据进行排序
- 保持排序的数据结构,允许log N插入时间,并且可以返回我在log N中查找的元素的索引
- 使用选择排序对数组数据结构进行排序,但它不起作用
- 为什么我的代码没有对数组中第二个索引上的数据进行排序?
- 使用 QSortFilterProxyModel 对 Qml ListView 的数据进行排序
- 读取 C++ 中的 txt 数据,展开为行或列并排序
- C++ 从文件中获取数据时使用 strcpy 和 strcmp 按字母顺序对数组进行排序?
- 存储在 std::map/std::set 中,与在存储所有数据后对向量进行排序
- 尝试创建排序的动态列表(数据结构)
- 固定大小的容器,其中元素被排序,并可以为C 中的数据提供原始指针
- 排序算法,使用模板按内部数据对对象进行排序
- 对多个数据成员进行排序
- 递归定义数组中的数据对齐和排序
- 如何修复输出显示,以便显示正确排序的数据
- 是否有具有对数时间插入、删除和查找(带距离)的排序数据结构
- 为什么大多数STL算法都需要将排序数据作为输入
- 用于插入大部分排序数据的数据结构,这些数据将保持排序顺序
- 可更新的DAWG库或来自未排序数据的DAWG构造
- 实现在单链表中添加和排序数据的函数(addsort)