c++ - 如何将大量数据作为值存储在 std::map 中?
问题描述
我需要在我的程序中存储大量交易数据并对其进行分析。我想通过不同的键将我的数据存储在不同的双端队列中,所以,我有一个这样的地图:
std::map< char, std::deque<UserDefinedType> > my_map;
另一种存储数据的方法是使用指向双端队列的共享指针:
std::map< char, std::shared_ptr< std::deque<UserDefinedType> > > my_map;
这些变体中的哪一个更适合性能?对于每个键,我在每个双端队列中大约有 ~200 个键和 ~9000 万个元素。
解决方案
如果每个双端队列只有一个实例,则不需要shared_ptr
. 如果您在不同键上的相同数据上构建多个 RAM 索引,共享指针将有很大帮助。
结合更多的东西。
如果您有 200 个键并且它们是单个字符,则此数据结构要快得多,只是不要忘记在访问时转换 from char
to uint8_t
,因为字符几乎总是有符号的:
std::array<std::deque<UserDefinedType>, 0x100>
通常,除非您需要为键排序,否则首选 std::unordered_map 而不是 std::map。所有主流编译器都将无序映射实现为哈希映射,将 std::map 实现为红黑树,速度要慢得多。
推荐阅读
- javascript - 将 json 转换为地图格式以实现角树
- three.js - 三JS编辑器中使用场景的用户数据
- javascript - 在不提供网页的情况下使用 npm 测试 javascript 代码
- javafx - HelloFX.java:1:错误:包 javafx.application.Application 不存在
- mysql - 如何从mysql中的重复数据中只选择一个数据?
- python - 无法在 Visual Studio 代码中安装 twilio
- javascript - 设置 Socket.io 房间变量
- python - 在 python 中下载批量图像
- integration - 带有动态域名的 Docusign 重定向 url
- html - 将 django Authentication 表单与 html 表单一起使用