c++ - map<int,vector<int>> 的算法

标签 c++ algorithm big-o

我在想出一个有效的算法来解决我遇到的 map vector 问题时遇到了麻烦。

假设我有一个 map> 我想知道一个整数在 map 的所有 vector 中出现了多少次,如果它出现在预定义的数量上,则从中删除它的值其余的 vector (希望这是有意义的),这是一个简单的例子:


关键值

1 - <2,3,4,4,5>

2 - <2,3,3,4,5>

3- <2,3,3,4,6>

在这种情况下,如果它出现超过三次,我想从所有 vector 中删除 4。生成的 map 如下所示:

1 - <2,3,4,4,5>

2 - <2,3,3,4,5>

3- <2,3,3,DEL,6>


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

感谢您的帮助

旁注,仅在此示例中, vector 在现实生活中并未排序。

最佳答案

由于 vector 未排序,因此执行此操作的唯一方法是遍历所有 vector 的所有项,跟踪已找到的项,并根据需要清理 vector 。我认为使用外部有状态谓词和删除-删除习语来执行此操作会很简单。

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

关于c++ - map<int,vector<int>> 的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12802939/

相关文章:

java - 非递归 Flood-Fill 算法导致 OutOfMemoryError

algorithm - 匹配和完全匹配的区别

php - array_unique 与 array_flip

C++ Allegro - 位图变黑?

c++ - 如何获取当前聚焦的菜单项ID?

c++ - C 字符串和字符数组声明

algorithm - 寻找 Big-O、Omega 和 theta

c++ - 子类无法访问父类的变量

algorithm - 理解 Dijkstra 算法

big-o - 大O表示法找到c和n0