首页 > 解决方案 > 如何将大量数据作为值存储在 std::map 中?

问题描述

我需要在我的程序中存储大量交易数据并对其进行分析。我想通过不同的键将我的数据存储在不同的双端队列中,所以,我有一个这样的地图:

std::map< char, std::deque<UserDefinedType> > my_map;

另一种存储数据的方法是使用指向双端队列的共享指针:

std::map< char, std::shared_ptr< std::deque<UserDefinedType> > > my_map;

这些变体中的哪一个更适合性能?对于每个键,我在每个双端队列中大约有 ~200 个键和 ~9000 万个元素。

标签: c++

解决方案


如果每个双端队列只有一个实例,则不需要shared_ptr. 如果您在不同键上的相同数据上构建多个 RAM 索引,共享指针将有很大帮助。

结合更多的东西。

如果您有 200 个键并且它们是单个字符,则此数据结构要快得多,只是不要忘记在访问时转换 from charto uint8_t,因为字符几乎总是有符号的:

std::array<std::deque<UserDefinedType>, 0x100>

通常,除非您需要为键排序,否则首选 std::unordered_map 而不是 std::map。所有主流编译器都将无序映射实现为哈希映射,将 std::map 实现为红黑树,速度要慢得多。


推荐阅读