【6】容器的排序和唯一化操作

此方法只是针对序列式容器 (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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值