【发布时间】:2013-01-09 20:42:42
【问题描述】:
周末我将参加一个编程比赛,我想知道我应该使用std::vector还是std::map?我会简单地将它们用作数组,但我很困惑哪个更好(主要是基本操作的速度)?
我在 stackoverflow 上看到了这张图片,但我不知道它们之间的主要区别是什么......
图片表明矢量更快... 我真的不知道该怎么办请帮助我!我只需要像数组一样使用它们,但具有动态大小...... 提前致谢,
编辑 我可能会得到一个整数的二维数组(例如,城市或迷宫的地图,我会遇到一些可以用图形算法或动态编程解决的问题),所以我需要的东西是:写,读“表”的特定单元格,搜索特定值,我想就是这样。 我听说 std::map 不会在内存中找到完整的 N*M 大小的表,但我会按值逐个进行......那么它可能会使用更少的内存是真的吗?
抱歉这么愚蠢,但我从来没有真正的老师,我学到了我所知道的一切。我刚开始学习数据结构(2-3棵树、红黑树、二项式堆等等……)
【问题讨论】:
-
了解这两者之间的差异是否重要?
-
您将关联容器与顺序容器进行比较,这有什么意义?这就像问船是否比汽车快 - 你可以得到一个有效的答案,但它们是满足完全不同需求的工具。
-
“图片表明矢量更快......”在特定时间特定机器上的特定任务。
-
@nábob:
vector是一个有序的元素序列;您按顺序存储元素并有一个整数来引用每个元素;map是一个关联容器 - 您存储键值对(只要满足某些约束,它们都可以是任何类型),您可以通过指定相应的键来检索每个值。您可以将矢量视为书架之类的东西,而地图更像是一本字典。 -
@nábob:整数键很好,如果你需要的话。如果你需要索引,那是向量。您甚至可以通过使用键作为索引在向量上实现自己的映射,尽管您的键很稀疏,您会浪费空间等。这一切都取决于。您需要退后一步并理解这一点:停止尝试直接比较它们。了解每个人单独做什么。
标签: c++ performance dictionary vector std