21xrx.com
2024-12-22 23:33:11 Sunday
登录
文章检索 我的文章 写文章
C++容器去重方法解析
2023-06-28 21:51:24 深夜i     --     --
C++ 容器 去重 方法 解析

C++是一门强大的编程语言,其容器特性极为强大。容器是一种集合,用于存储对象。这些对象可以是任何类型,包括基本类型和用户定义的类型。在C++中,有许多容器可供选择,包括向量、链表、集合和映射等。

在实际开发过程中,我们常常需要从容器中删除重复的对象。C++提供了多种去重方法,本文将解析几种常见的去重方法。

1. 使用set容器去重

set容器是一个自动排序的容器,当我们将元素插入set容器时,set容器会自动去重。这是因为set容器只存储唯一的元素。当我们需要从容器中删除重复的元素时,set容器是一个不错的选择。

以下是一个示例代码:


#include <iostream>

#include <set>

using namespace std;

int main()

{

  int arr[] = 3;

 

  int size = sizeof(arr) / sizeof(arr[0]);

  set<int> s(arr, arr + size);

  cout << "Set size is " << s.size() << endl;

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

    cout << *it << " ";

  cout << endl;

  return 0;

}

执行上述代码,输出结果为:


Set size is 6

1 2 3 4 5 6

2. 使用unique和erase方法去重

unique和erase方法可以一起使用,用于删除顺序容器中的重复元素。unique返回一个迭代器,指向容器中的不同元素的区域末尾,我们可以在erase调用中使用该迭代器,以删除重复元素。

以下是一个示例代码:


#include <iostream>

#include <vector>

#include <algorithm>

using namespace std;

int main()

{

  int arr[] = 5;

  int size = sizeof(arr) / sizeof(arr[0]);

  vector<int> v(arr, arr + size);

  auto it = unique(v.begin(), v.end());

  v.erase(it, v.end());

  cout << "Vector size is " << v.size() << endl;

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

    cout << *it << " ";

  cout << endl;

  return 0;

}

执行上述代码,输出结果为:


Vector size is 6

1 2 3 4 5 6

3. 使用unordered_set容器去重

unordered_set容器是C++11新增的一种容器类型,其特点是无序、唯一和快速的查找操作。我们可以使用unordered_set容器来删除重复元素。

以下是一个示例代码:


#include <iostream>

#include <unordered_set>

#include <vector>

using namespace std;

int main()

{

  int arr[] = 4;

  int size = sizeof(arr) / sizeof(arr[0]);

  vector<int> v(arr, arr + size);

  unordered_set<int> us(v.begin(), v.end());

  cout << "Unordered set size is " << us.size() << endl;

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

    cout << *it << " ";

  cout << endl;

  return 0;

}

执行上述代码,输出结果为:


Unordered set size is 6

5 4 3 2 1 6

以上是一些C++容器去重方法的解析,不同的方法适用于不同的情况,我们需要根据实际情况选择合适的方法。

  
  

评论区

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