21xrx.com
2024-09-19 09:57:47 Thursday
登录
文章检索 我的文章 写文章
C++数组去重筛选
2023-07-09 18:57:47 深夜i     --     --
C++ 数组 去重 筛选

C++是一门经典的程序设计语言,其灵活性和高效性广泛受到开发者的欢迎。在应用C++编写程序时,数组是一种常见的数据结构。然而,在处理数据时,如果数组元素中存在重复值,就需要对其进行去重筛选。本文将介绍如何利用C++实现数组去重筛选的方法。

首先,为了实现数组去重筛选,我们需要先创建一个包含重复元素的数组。假设我们要去除下面数组中的重复元素:


int a[] = 2;

利用C++编写程序实现去重筛选有多种方法,其中一种简单但低效的方法是通过嵌套的for循环对数组进行遍历。具体来说,可以首先遍历数组中的每一个元素,然后再可以拿其中一个元素与其后面的所有元素进行比较,若找到相同元素,则将其删除。这样做的代码如下所示:


for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++){

  for (int j = i + 1; j < sizeof(a) / sizeof(a[0]); j++){

    if (a[i] == a[j]){

      int k = j ;

      while (k < sizeof(a) / sizeof(a[0]) - 1){

        a[k] = a[k + 1];

        k++;

      }

      j--;

    }

  }

}

以上代码的第一个for循环遍历整个数组,第二个嵌套循环用于比较当前元素与其后面的所有元素。若相同,则使用循环将后面的数组元素向前移动,并将数组元素中的最后一个元素删除。这种方法虽然简单,但因为需要频繁地移动数组元素,当数组元素较多时其效率较低。

当然,还有一种更高效且更适合大规模数组元素去重的方法。我们可以利用哈希表建立一个数据-出现次数的映射关系,使用unordered_map实现。将数组元素循环插入哈希表中,若已经存在该元素,则对应的出现次数+1。最后,使用一个for循环遍历哈希表,提取所需的元素信息,即已去重的数组元素,并将其存储在新的去重后的数组中。以下是代码实现:


#include <iostream>

#include <unordered_map>

int main(){

  int a[] = 3;

  std::unordered_map<int, int> map;

  std::vector<int> new_a;

  for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++) {

    if (map.find(a[i]) == map.end())

      map[a[i]] = 1;

    else

      map[a[i]] += 1;

  }

  for (auto it = map.begin(); it != map.end(); it++) {

    new_a.push_back(it->first);

  }

  for (int i = 0; i < new_a.size(); i++) {

    std::cout << new_a[i] << " ";

  }

  return 0;

}

代码首先创建了一个名为map的哈希表,以存储数组元素及其出现次数的映射关系。然后,使用for循环遍历数组中的所有元素,将哈希表中所对应的元素出现次数+1。接着,使用一个for循环遍历哈希表,将哈希表中的键值存储到新的出现次数为1的数组中。最后,再次运用for循环遍历新的数组,并输出去重后的结果。

上述两种方法均可实现C++数组去重筛选。然而,第一种方式效率低下,不适合对大规模数组采用。第二种方法效率更高,建议优先使用。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复