Search code examples
c++duplicatesmultimap

How to count number of duplicate pairs in multimap


how can I count the number of duplicate pairs (with same key and value) in a multimap of pairs of integers?

For example, my multimap contains the pairs {(6,2), (6,2), (6,3) and (6,4)} so the duplicate count is 1 as I have 1 duplicate pair in my multimap. I have tried using methods such as find() and count() but to no avail. Any help will be greatly appreciated!


Solution

  • One common approach is to use a std::set. This cannot contain duplicate data.

    We will try to put all data into the std::set using its range constructor. Using CTAD makes writing easier.

    Then we compare the size of the std::multimap with that of the std::set and have the number of all duplicates.

    So it boils down to a very simple program. Please see:

    #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;
    }
    

    If there are different requirements, then please feedback and I will create an additional solution.