gpt4 book ai didi

c++ - 选择什么容器

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:01:32 25 4
gpt4 key购买 nike

我考虑过存储一些对象……现在我不知道该选择什么。

所以,现在我有了这样的代码:

std::map<std::string, Object*> mObjects;

但是,正如我之前在这里被告知的那样,由于在每次搜索中都分配了 std::string,所以速度很慢,因此键应该是整数。

为什么我选择 std::string 作为键?因为通过名称访问对象非常容易,例如:

mObjects["SomeObj"];

所以我的第一个想法是:

std::map<int, Object*> mObjects;

key 是对象名称的 CRC:

mObjects[CRC32("SomeObject")];

但它有点不稳定。我知道为此有特殊的 HashMap 。最后,我必须使用一些 Compare 函数对 map 中的对象进行排序。

关于我可以使用的容器有什么想法吗?

再说一遍,要点:

  • 通过字符串访问对象,但key应该是整数,而不是字符串
  • 通过某些函数对 map 中的对象进行排序

附注允许使用 boost。

最佳答案

我不能肯定地说,但您是否总是通过文字字符串访问 map 中的项目?如果是这样,那么您应该只使用带有符号名称的连续枚举值和适当大小的 vector

假设您直到运行时才知道名称 map 中的 1000 个项目对于搜索来说似乎真的很小,可能成为瓶颈。您确定查找是性能问题吗?您是否进行了概要分析以确保情况确实如此?通常,使用最直观的容器会产生更好的代码(因为您可以更轻松地掌握算法)代码。

您关于构造字符串的评论是否暗示您将 C 字符串一遍又一遍地传递给查找函数?通过在您的应用程序中始终如一地使用 std::string 来尝试避免这种情况。

如果您坚持使用两部分方法:我建议将所有项目存储在一个vector 中。然后你有一个 unordered_map 从字符串到索引,另一个 vector 将所有索引放入主容器。然后对第二个索引容器进行排序以获得所需的顺序。最后,当您从主容器中删除项目时,您需要清理其他两个引用容器。

关于c++ - 选择什么容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5598825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com