map <int,vector <int>&gt; </int,vector <int>的算法

时间:2012-10-09 15:00:48

标签: c++ algorithm big-o

我无法为我的地图矢量问题考虑一个有效的算法。

说我有一张地图&lt; int,vector&lt; int&gt; &GT;我想知道一个整数出现在地图的所有向量中的次数,如果它出现在预定量上,则从其余向量中移除它的值(希望这是有意义的),这是一个简单的例子:


关键值

1 - &lt; 2,3,4,4,5&gt;

2 - &lt; 2,3,3,4,5&gt;

3-&lt; 2,3,3,4,6&gt;

在这种情况下,如果发生超过三次,我想从所有向量中删除4。生成的地图如下所示:

1 - &lt; 2,3,4,4,5&gt;

2 - &lt; 2,3,3,4,5&gt;

3&lt; 2,3,3,DEL,6&gt;


我正在为这个问题寻找一种有效的算法,只是想知道是否有人有任何想法。 (我在C ++工作,但我知道java或伪代码很酷)。

感谢您的帮助

侧面注意,在此示例中,矢量未在现实生活中进行排序。

1 个答案:

答案 0 :(得分:2)

由于向量没有排序,唯一的方法是遍历所有向量的所有项目,跟踪已找到的向量,并根据需要清理向量。我认为使用外部有状态谓词和删除擦除习惯来做这件事是直截了当的。

鉴于您的确切需求和容器使用,可能会有其他方法。例如,如果vector实际上不需要是可索引的,则可以使用multiset来保持项目的排序,并提供简单的计数和删除。