【问题标题】:Get the number of duplicated elements in a set获取集合中重复元素的数量
【发布时间】:2022-12-08 06:46:27
【问题描述】:

所以一个集合不允许重复,但是有没有一种方法或另一种数据结构可以让我获得重复元素的数量,即使它们已被删除?无论如何,让我更好地解释自己。

假设我正在提供以下输入:

[1, 2, 2, 3, 2, 5, 3]

如果我把它放在一个集合中,它最终会是这样的:

[1, 2, 3, 5]

哪个是我想要的,但是我怎么知道在它们被删除之前有三个 2?这不是与那些带有“桶”之类的数据结构有关吗?

基本上我希望输出是这样的:

[1, 2, 3, 5]
 |  |  |  |
[1, 3, 2, 1]

底部数组是顶部数组中每个元素的重复项数。

【问题讨论】:

  • 你想到的数据结构是一个“包”。 C++ 将其称为 std::multiset
  • 您可以使用 std::map< Key,Value> 来计算频率。 Key 是数字,Value 是他们的频率
  • 你想要容器中的信息吗?然后是std::map。或者您想将其与容器分开存放?然后是std::set
  • 恕我直言,这个问题还不清楚。集合只存储唯一元素,因此您不能计算“集合中的重复元素”。如何知道有 3 个 2?您查看原始数据并计算 2s。您要解决的实际问题是什么?
  • 你想计算频率。关于这个有很多问题。使用std::map< number , frequency >

标签: c++


【解决方案1】:

您可以使用 std::map 来计算项目的频率。

例如:

int arr[] = {1, 2, 2, 3, 2, 5, 3};

std::map<int, int> count;

for (int i = 0; i < 7; i++) {
    count[arr[i]]++;
}

for (auto& [element, frequency] : count) {
    std::cout << element << " : " << frequency << endl;
}

输出将是这样的:

1 : 1
2 : 3
3 : 2
5 : 1

【讨论】:

  • 比我快1分钟。打印它的唯一区别是for (const auto &amp; ....
【解决方案2】:

你自己给出了答案:如果足以保持计数对应到独特的元素。因此,紧凑的数据结构是与计数列表配对的唯一元素列表以相同的顺序.

现在如何获得它取决于您计划如何删除重复项以及所需的访问类型。一种方法是对初始列表进行排序,在计算重复项的同时清除重复项并填充计数列表。另一种方法是使用以列表元素为键的映射并将它们与计数相关联。您可以选择保留地图还是填写新列表。

【讨论】:

    【解决方案3】:

    在 C++ 中,集合中重复元素的数量可以通过使用 size() 函数减去集合中唯一元素的数量来确定,这可以通过使用 unique() 函数找到。

    #include <iostream>
    #include <set>
    #include <algorithm>
    
    int main()
    {
    std::set<int> mySet;
    mySet.insert(1);
    mySet.insert(2);
    mySet.insert(2);
    mySet.insert(3);
    mySet.insert(3);
    mySet.insert(3);
    
    int numDuplicates = 0;
    int lastElement = -1;
    for (int element : mySet) {
        if (element == lastElement) {
            numDuplicates++;
        }
        lastElement = element;
    }
    
    std::cout << numDuplicates << std::endl;
    
    return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 2019-04-15
      • 2016-02-26
      • 1970-01-01
      • 1970-01-01
      • 2015-03-05
      • 2010-12-29
      • 1970-01-01
      • 2012-11-21
      • 1970-01-01
      相关资源
      最近更新 更多