映射比稀疏矢量更好?

时间:2013-01-16 00:43:49

标签: c++ memory map vector

我有两个对象:

vector<string> v(999999);
map<int, string> m;

我需要存储一些索引字符串对,尽管它非常稀疏(比如只有20对)。我想知道 vector 是否比 map 占用更多内存?如果是这样,向量占用了多少内存?为什么在这种情况下使用向量是不好的?

3 个答案:

答案 0 :(得分:3)

是的,在实践中,向量将占用至少999999 * (sizeof(string) + C) + sizeof(vector)个字节(其中C是由string自动执行的任何动态分配)。 map会产生开销,但肯定不会接近999999的数量级。

答案 1 :(得分:1)

我猜你可以使用向量,如果查找时间绝对关键,因为它在向量上是常量,因为你已经知道索引,所以实际上是指针算术,但是随着地图上的大小增长(O(log) N))。事实上,对于那种权衡,情况确实很可怕。

答案 2 :(得分:1)

对于大约20个元素,创建具有10 ^ 6个元素的向量没有意义。地图的使用将具有更好的内存占用,甚至可能比矢量更快。您还可以考虑使用std::pair<int,std::string>向量来保持键/值对的混合方法,并对向量进行线性搜索(20个元素非常少,足够少,您可以考虑成本为常数,较简单的算法可能会补偿额外的操作次数。)