【问题标题】:which STL container to use for inter-related data?哪个 STL 容器用于相互关联的数据?
【发布时间】:2011-09-18 22:31:15
【问题描述】:

首先,这是一个游戏项目。

我需要有一个名为 Skill 的对象,其中包含它们的字符串名称、一些其他成员和一个成员,该成员是一组称为“requirements”的其他 Skill 对象。 (这将是给定技能所需的先决技能列表)

我应该将一组所有技能对象放在哪种 STL 容器中?向量?放?地图?
这个容器也可以作为成员“requirements”的类型吗?

技能必须是独一无二的。
至于我将对技能组做什么 - 按名称搜索,主要是和组合技能组,并将技能附加到集合中。

【问题讨论】:

    标签: c++ stl containers


    【解决方案1】:

    您不会根据容器需要包含的内容来定义容器需求,而是通过哪些操作将是常见的以及它们需要操作多快来定义它。

    在某个地方有一个很棒的图表,有点像流程图,可以指导您选择容器。如果我找到它,我会更新这个答案。

    编辑:这里是:In which scenario do I use a particular STL container?

    【讨论】:

    • 这是您要找的吗? stackoverflow.com/questions/471432/…
    • @GWW,是的,就是这样,我在发布答案后一分钟内自己找到了它。不过还是谢谢。
    • 没问题,我一定在您编辑答案时发表了评论。这是一个整洁的图表:)
    【解决方案2】:

    技能需要独特。

    第一印象认为您应该使用mapset。但这降低了在集合中“搜索”的灵活性。我会简单地从vector 开始,将该向量放在某个类中。该类将具有AppendSkill 并检查给定的Skill 是否已经退出。如果不追加,则返回 false/failure。

    同一个班级应该有助于组合和附加技能/技能组。

    【讨论】:

    • 你对我的这个想法帮助了我很多,一个班级可以完成所有这些工作!谢谢!而且,是的,事实证明我毕竟会使用矢量。希望不要太慢。
    • 矢量并不慢。但这取决于您将如何“搜索”特定数据元素,以及向量中有多少元素。由于您确实有多个搜索条件,因此您可以使用映射来保存这些字符串,而“值”部分将是向量的迭代器/索引。但同样,如果搜索字符串是精确的搜索字符串。如果有部分字符串进来,你最好只在向量中搜索。希望你明白我的意思。
    • 向量中将有大约一千个对象。我认为不会搜索部分字符串。那么,您的意思是我将要搜索的所有字符串都有一个单独的映射,其值是相应技能在向量中所在的向量索引?然后只需通过地图中的字符串键找到我想要的技能。我明白了吗?
    • 假设字符串搜索是区分大小写的,否则你也必须为此编写一些比较器函数。还要确保这些字符串是唯一的,否则考虑使用 multimap。
    猜你喜欢
    • 2014-09-10
    • 1970-01-01
    • 2010-12-06
    • 2011-03-14
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多