Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何计算多重映射中的重复对数_C++_Duplicates_Multimap - Fatal编程技术网

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,你应该考虑这样做一个答案!