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