利用STL离散化处理数据(unique)
生活随笔
收集整理的這篇文章主要介紹了
利用STL离散化处理数据(unique)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
0x00 使用說明
離散化可以很好的減小空間復(fù)雜的度, 它適用于數(shù)據(jù)中有大量重復(fù)的值(或則數(shù)據(jù)之間跨度特別大), 使用時(shí)可以只需要其中一個(gè)。 下面的離散化處理只是對(duì)于有大量重復(fù)值的情況。先數(shù)據(jù)存入容器對(duì)象vector<int> vec,
保證使用unique前 數(shù)據(jù)是有序的。
1. 先使用sort排序:
sort(vec.begin(),vec.end());2. 使用unique離散化:
此時(shí)unique離散化處理并不是將重復(fù)的元素刪去,
而是將后面不重復(fù)的數(shù)來覆蓋重復(fù)了的數(shù),
可以看下面代碼的運(yùn)行結(jié)果(或者參考:cppreference),
unique返回值為目標(biāo)序列最后一個(gè)需要的值的地址(或迭代器對(duì)象),
可以減去首地址轉(zhuǎn)化一下
3. 刪除不需要部分
vec.erase(vec.begin()+cnt,vec.end());0x01 測(cè)試代碼
#include <iostream> #include <vector> #include <algorithm> using namespace std;int main() {int a[8] = {1,5,3,2,3,2,7,90};sort(a,a+8);vector<int>vec(a,a+8);cout<<"使用unique前:"<<endl;for(int i = 0; i < vec.size(); i++){cout<<vec[i]<<" ";}cout<<endl;/*使用unique前需要保證數(shù)據(jù)是有序的,unique返回的是不重復(fù)序列最后的地址(迭代器形式),unique只是將重復(fù)的元素的位置用后面與它不同的元素來覆蓋*/int cnt = unique(vec.begin(),vec.end())-vec.begin();cout<<"目標(biāo)序列長(zhǎng)度:"<<cnt<<endl;cout<<"使用unique后:"<<endl;for(int i = 0; i < vec.size(); i++){cout<<vec[i]<<" ";}cout<<endl;cout<<"使用erase后:"<<endl;vec.erase(vec.begin()+cnt,vec.end());for(int i = 0; i < vec.size(); i++){cout<<vec[i]<<" ";}cout<<endl;return 0; }總結(jié)
以上是生活随笔為你收集整理的利用STL离散化处理数据(unique)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小魂和他的数列(dp+树状数组优化)
- 下一篇: 小翔和泰拉瑞亚(线段树+思维)