我想知道哪个容器在std::map
和std::vector
之间使用较少的内存并使用大量数据。
大量帖子谈论效率,我的优先级不是效率而是内存消耗。所以,如果我们不知道我们的数据的数量(在我的情况下可以超过12,000,000个条目,每个条目是一个20个字符的字符串),地图真的比矢量好吗?
答案 0 :(得分:3)
std::vector
必须组织连续内存中的字符串。 (标准坚持这一点)。因此,对于sizeof(string) * 12,000,000
,示例中的连续内存量至少为std::vector
。幸运的是,每个字符串可能在堆中都有它的缓冲区:对于使用固定缓冲区作为短字符串的std::string
实现,截止数为20个字符。
std::map
不会出现这种连续性问题,因此可能是在此实例中使用的更好的容器。但是,总体而言,它可能会消耗更多内存。但是这个记忆对于程序来说会更容易获得。
答案 1 :(得分:2)
取决于您正在解决的问题。基本上,std :: vector使用行内存(因为你的数据很大,请确保你有一个),但是std :: map可以从内存的不同部分获取每个节点。相反,std :: map对同一数据使用更多内存,因为节点之间的指针操作。
答案 2 :(得分:2)
答案 3 :(得分:1)
如果你想将数据保存在连续内存中,你应该选择std::vector
否则如果您更喜欢基于节点的数据结构并且需要进行大量的插入和删除操作,我建议std::list
代替std::map
{1}}。
如果您更喜欢基于节点的数据结构,并且在数据结构的元素之间保持顺序并且没有键值对,我更喜欢std::set
而不是std::map
。
如果您更喜欢基于节点的数据结构,并将数据作为键值对,并且保持元素之间的顺序取决于数据的关键值,我更喜欢std::map