[英]map better than sparse vector?
我有2个对象:
vector<string> v(999999);
map<int, string> m;
我需要存储一些索引字符串对,尽管它非常稀疏(例如只有20对)。 我想知道向量是否比map占用更多的内存? 如果是这样,向量将占用多少内存? 在这种情况下使用向量为什么不好?
是的,在实践中,向量将至少占用999999 * (sizeof(string) + C) + sizeof(vector)
个字节(其中C
是string
自动执行的任何动态分配)。 该map
将有开销,但绝对不会接近999999。
我想如果查找时间是绝对关键的,则可以使用向量,因为它在向量上是恒定的,因为您已经知道索引,但是有效地使用了指针算术,但是随着地图上的大小增长(O(log n))。 但是,确实确实需要进行这种折衷的情况。
对于大约20个元素,创建具有10 ^ 6个元素的向量毫无意义。 使用映射将具有更好的内存占用,甚至可能比向量更快。 您还可以考虑使用包含键/值对的std::pair<int,std::string>
向量的混合方法,并对向量进行线性搜索(20个元素很少 ,所以可以考虑费用保持不变,并且更简单的算法可能会补偿额外的操作次数)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.