繁体   English   中英

地图比稀疏向量更好?

[英]map better than sparse vector?

我有2个对象:

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

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

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

我想如果查找时间是绝对关键的,则可以使用向量,因为它在向量上是恒定的,因为您已经知道索引,但是有效地使用了指针算术,但是随着地图上的大小增长(O(log n))。 但是,确实确实需要进行这种折衷的情况。

对于大约20个元素,创建具有10 ^ 6个元素的向量毫无意义。 使用映射将具有更好的内存占用,甚至可能比向量更快。 您还可以考虑使用包含键/值对的std::pair<int,std::string>向量的混合方法,并对向量进行线性搜索(20个元素很少 ,所以可以考虑费用保持不变,并且更简单的算法可能会补偿额外的操作次数)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM