【发布时间】:2020-02-21 15:58:29
【问题描述】:
如何计算整数对的多重映射中重复对(具有相同键和值)的数量?
例如,我的多图包含对 {(6,2)、(6,2)、(6,3) 和 (6,4)},因此重复计数为 1,因为我的中有 1 个重复对多图。我尝试过使用 find() 和 count() 等方法,但无济于事。任何帮助将不胜感激!
【问题讨论】:
-
我强烈建议您尽最大努力(minimal reproducible example 格式)。它可能只需要一个小的修正,如果不需要,它提供了一个基线,人们可以围绕该基线撰写最适合您目标的答案。另外,不要低估展示您已投入时间解决问题的社会效益,并且不要简单地期望让其他人为您完成工作。
-
感谢您的回复,很抱歉没有必要的代码,因为这只是我算法中的一个想法,我不确定它是否会起作用。但是,我一直在考虑比较多图中的每一对,但我不确定该怎么做。
-
从您的多地图制作
std::set,std::set<std::pair<int,int>> s{m.begin(),m.end()};(其中m是多地图)以及您将获得的重复数量:m.size() - s.size()。 -
如果 值 被限制在
int的某个 小区间,例如大小 k,您可以使用线性复杂度和 O(k) 辅助内存存储快速完成此操作。遍历算法是here in the second answer,要计算特定键的重复项,您只需要一个大小为 k 的数组。它可能比使用动态内存分配的 set/unored_set 快得多。 -
谢谢@rafix07,您应该考虑将其作为答案!
标签: c++ duplicates multimap