C++ 如何计算多重映射中的重复对数
如何计算整数对多重映射中的重复对数(具有相同的键和值)C++ 如何计算多重映射中的重复对数,c++,duplicates,multimap,C++,Duplicates,Multimap,如何计算整数对多重映射中的重复对数(具有相同的键和值) 例如,我的多重映射包含对{(6,2)、(6,2)、(6,3)和(6,4)},因此重复计数为1,因为我的多重映射中有1个重复对。我尝试过使用find()和count()等方法,但没有效果。任何帮助都将不胜感激 一种常见的方法是使用std::set。这不能包含重复的数据 我们将尝试使用其范围构造函数将所有数据放入std::set。使用CTAD使书写更容易 然后,我们将std::multimap的大小与std::set的大小进行比较,并得出所有重
例如,我的多重映射包含对{(6,2)、(6,2)、(6,3)和(6,4)},因此重复计数为1,因为我的多重映射中有1个重复对。我尝试过使用find()和count()等方法,但没有效果。任何帮助都将不胜感激 一种常见的方法是使用
std::set
。这不能包含重复的数据
我们将尝试使用其范围构造函数将所有数据放入std::set
。使用CTAD使书写更容易
然后,我们将std::multimap
的大小与std::set
的大小进行比较,并得出所有重复项的数量
所以它归结为一个非常简单的程序。请参阅:
#include <iostream>
#include <map>
#include <set>
int main()
{
// Source data
std::multimap<int, int> mm = { {6, 2}, {6, 3}, {6, 2}, {6, 4} };
// Use range constructor and CTAD to put the data into a set
std::set s(mm.begin(), mm.end());
// Show result
std::cout << "Number of duplicates: " << mm.size() - s.size() << "\n";
return 0;
}
#包括
#包括
#包括
int main()
{
//源数据
多重映射mm={{6,2},{6,3},{6,2},{6,4};
//使用范围构造函数和CTAD将数据放入一个集合
std::set s(mm.begin(),mm.end());
//显示结果
我可以强烈推荐你展示你最好的尝试吗(格式)。它可能只需要一个小的更正,如果不需要,它提供了一个基准,人们可以围绕这个基准来撰写最适合您的目标的答案。此外,不要低估表明您已在解决问题上投入了时间,而不仅仅是期望他人为您完成工作的社会效益。感谢您的回复,对此表示歉意拥有必要的代码,因为这只是我算法中的一个想法,我不确定它是否会起作用。然而,我一直在考虑比较多重映射中的每一对,但我不确定如何做。从多重映射中创建std::set
,std::set s{m.begin(),m.end};
(其中m
是多重映射)您将获得的重复数:m.size()-s.size()
。如果值被限制在int
的某个小间隔内,比如大小k,您可以使用线性复杂度和O(k)快速完成此操作辅助内存存储。遍历算法是,对于特定键的重复计数,只需要一个大小k的数组。它可能比使用SET/UNOREDEDY集快得多,动态内存分配发生在这里。谢谢@ RAFIX07,你应该考虑这样做一个答案!