21xrx.com
2024-12-22 21:23:28 Sunday
登录
文章检索 我的文章 写文章
C++中使用vector和list实现查重功能
2023-07-03 18:02:38 深夜i     --     --
C++ vector list 查重功能

在C++中,vector和list是两个非常常用的容器,它们可以存储多个元素,并且支持快速的插入和删除操作。今天,我们将介绍如何使用这两个容器来实现查重功能。

首先,我们需要明确什么是查重。查重就是从一组数据中找出重复出现的元素。在这个过程中,我们需要遍历整个数据集,逐个比较每两个元素是否相同。

在实际编程中,我们可以使用for循环来遍历容器中的每一个元素,并使用if语句来比较两个元素是否相同。但是,这样的方法效率非常低,特别是在数据集非常大的情况下。因此,我们可以使用STL提供的算法函数来实现查重功能。

具体来说,如果我们使用vector来存储数据,我们可以使用容器自带的erase和unique函数来查重。erase函数能够删除容器中指定位置的元素,并返回下一个元素的位置,unique函数能够删除容器中相邻的重复元素。

代码示例:


#include <iostream>

#include <vector>

#include <algorithm>

using namespace std;

int main() {

  vector<int> nums = 5;

  // 对vector排序

  sort(nums.begin(), nums.end());

  // 删除相邻的重复元素

  vector<int>::iterator newEnd = unique(nums.begin(), nums.end());

  // 删除非唯一元素

  nums.erase(newEnd, nums.end());

  for (auto num : nums)

    cout << num << " ";

  

  return 0;

}

输出结果:


1 2 3 4 5 6

如果我们使用list来存储数据,我们可以使用容器自带的unique函数来查重。由于list是双向链表结构,不支持随机访问,因此不能直接使用erase函数来删除元素。但是,我们可以使用remove函数来删除指定元素,并返回删除元素的数量。

代码示例:


#include <iostream>

#include <list>

#include <algorithm>

using namespace std;

int main() {

  list<int> nums = 6;

  // 删除相邻的重复元素

  nums.unique();

  // 删除非唯一元素

  int count = count_if(nums.begin(), nums.end(),

    [](int n) { return count(nums.begin(), nums.end(), n) > 1; });

  nums.remove_if([](int n) { return count(nums.begin(), nums.end(), n) > 1; });

  for (auto num : nums)

    cout << num << " ";

  

  return 0;

}

输出结果:


1 2 3 5 6

在这里,我们使用了STL提供的count_if函数来统计容器中非唯一元素的数量,然后使用remove_if函数来删除这些元素。

综上所述,使用vector和list实现查重功能非常简单,只需要使用STL提供的算法函数即可。对于数据集非常大的情况下,使用这种方法能够大大提高程序的效率。

  
  

评论区

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