c++ - map 在什么尺寸下比 vector 更好?

标签 c++ dictionary vector

我有一个对象集合,每个对象都有一个标识符(字符串)。现在我想知道我应该将它们存储为 vector 还是 map ,所以 std::vector<cObject>std::map<std::string,cObject> .每个名称只能使用一次,因此我需要检查 vector/ map 是否出现了给定名称。使用 map 时,我将使用 find() 以对数方式缩放,而对于 vector ,我将迭代并测试 oObject.name == newname直到我找到名字或到达结尾,它是线性扩展的。映射的一个缺点是名称存储了两次,一次在对象内部,一次作为键。

虽然对于大型 vector/ map , map 总是会获胜,但我想知道在什么情况下会出现这种情况,因为如果我只有最多 10 个对象要存储, map 似乎有点过分了。

这引出了我的问题:与普通 vector 相比, map 在什么时候变得有利(关于性能)?如果预期的对象数量约为 10、100、1000 甚至更大,我是否应该考虑使用 map ?我承认这个问题比较模糊,但我还是希望能得到一些建议,以了解何时使用哪个容器。

最佳答案

很难预测 map 比 vector 更有利的大小。但有几点您可以考虑:

  1. map 基本上是作为二叉树实现的,而 vector 是作为数组实现的。因此,当有 10 到 12 个元素时,迭代数组 for let says 相对容易,因为这将是线性搜索。
  2. map 比 vector 快这一点取决于处理器上的实现以及您尝试在其中存储的数据。我最好的猜测是,对于 5-20 个元素, map 会更快。(但这只是一个猜测,我建议您为自己创建一个基准)
  3. “默认情况下,需要容器时使用 vector ”- Bjarne Stroustrup。

您可能还会找到这个 C++ Containers Cheat Sheet有用

关于c++ - map 在什么尺寸下比 vector 更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30980263/

相关文章:

c++ - 从迭代器中的函数指针调用函数

c++ - 在这个 C++ 代码中发生了什么?

python - 从 Python 字典中获取任意元素的最快方法是什么?

python - 从使用Python中的groupby itertools创建的词典列表中删除重复项

c++ - Vector 和 String 结构的 vector 未正确打印

opencv - 在 opencv 中使用 cv::rect 提取 Roi

c++ - typedef 类型检查?

c++ - 避免与 1 :N relationship in entity-component-system 相关的缓存未命中

Android:语音识别追加字典?

c++ - 遍历 vector 的所有成员