此方法只是针对序列式容器 (vector array list deque)
【1】通过调用STL函数完成去重的排序
如果先去重
再排序
那么结果就是:去重毫无作用。因为去重
再排序
排序时会把重复的数字又放在了一起,所以要先排序
再去重
。
需要函数如下(以下函数需要调用STL函数)
sort()//排序
unique() //去重
【2】编程思路
(1)定义容器 存入数据
(2)数据排序
(3)数据去重 删除多余元素
【3】注意要点
(1)unique()函数是一个去重函数,STL中unique的函数unique的功能是去除相邻的重复元素(只保留一个),还有一个容易忽视的特性是它并不真正把重复的元素删除。
(2)unique(num,mun+n)返回的是num去重后的尾地址,之所以说比不真正把重复的元素删除,其实是,该函数把重复的元素一到后面去了,然后依然保存到了原数组中,然后返回去重后最后一个元素的地址,因为unique去除的是相邻的重复元素,所以一般用之前都会要排一下序。
实现代码
#include "pch.h"
#include <iostream>
#include<vector>
#include<iostream>
#include <algorithm>
using namespace std;
int main()
{
vector<int> vec1;
vec1.push_back(1);
vec1.push_back(2);
vec1.push_back(5);
vec1.push_back(2);
vec1.push_back(5);
vec1.push_back(1);
vec1.push_back(7);
vec1.push_back(8);
//定义迭代器
vector<int>::iterator piter;
//原始数据
cout << "容器未排序" << endl;
for (piter = vec1.begin(); piter != vec1.end(); piter++)
{
cout << *piter<<" ";
}
//容器排序
sort(vec1.begin(), vec1.end());
//容器唯一化 unique唯一化 erase删除后续多余的元素
//unique删除重复的元素 但是没有改变容器长度 最后返回的是原有长度地址 因此原数据最后几个元素会显示出来
vec1.erase(unique(vec1.begin(), vec1.end()), vec1.end());
//显示结果元素
cout << endl;
cout << "容器元素去除多余元素" << endl;
for (piter = vec1.begin(); piter != vec1.end(); piter++)
{
cout << *piter << " ";
}
system("pause");
return 0;
}
参考文献
去重排序(unique函数的使用): https://blog.csdn.net/lanjiangzhou/article/details/8993282
超简单的C++去重、排序:https://blog.csdn.net/qq_41139830/article/details/80631988
STL之unique()去重函数:https://blog.csdn.net/tomorrowtodie/article/details/51907471