std :: map是一个很好的解决方案吗?

时间:2013-01-05 08:31:59

标签: c++ sorting stl

所有

我有以下任务。

我有有限数量的字符串(类别)。然后在每个类别中将有一组团队和价值对。根据用户选择,团队数量是有限的。

两种尺寸都不超过25个。

现在值将根据用户输入而改变,当它发生变化时,团队应该根据值进行排序。

我希望STL有某种自动排序的矢量或列表容器,但我唯一能找到的是std :: map<>。

所以我认为我需要的是:

struct Foo
{
    std::string team;
    double value;
    operator<();
};

std::map<std::string,std::vector<Foo>> myContainer;

并在值改变时调用std :: sort()。

或者有更有效的方法吗?

[编辑] 我想我需要澄清一下我的意思。 以这种方式思考。

你有一张桌子。这个表的行是团队。此表的列是类别。该表的单元格被分成两半。上半部分是给定团队的类别值。每个玩家都会增加这个值。 现在,当玩家被添加到团队中时,玩家的评分类别将被添加到团队中,并且列中的数据将被排序。因此,对于类别“A”,它可能是team1,team2;对于类别“B”,它可能是team2,team1。 然后根据每个团队的位置,为每个团队/类别分配分数。 我需要显示那个分数。

我希望这会澄清我想要实现的目标,并且我会更清楚地了解我正在寻找的东西。 [/编辑]

1 个答案:

答案 0 :(得分:1)

这实际上取决于您修改地图中数据的频率以及您只需要搜索std :: string并抓取矢量的频率。

如果您的访问模式是添加地图条目然后填写向量中的所有条目然后访问下一个,填充向量中的所有条目,然后等。然后随后随机访问该向量的地图..没有地图可能不是最好的容器。你最好使用包含一对标准字符串和向量的向量,然后在添加完所有内容后对其进行排序。

事实上,如上所述组织它可能是设置它的最有效方式(我承认这并不总是可行)。此外,使用某种散列值代替std :: string是非常明智的,因为散列比较比字符串比较快许多倍。无论如何你也将字符串存储在Foo中。

然而,

地图会起作用,但它确实取决于你想要做什么。