自己写的 基于map的离散化模板类

 1 #include<iostream>
 2 using namespace std;
 3 #include<cstdio>
 4 #include<cstring>
 5 #include<algorithm>
 6 #include<map> 
 7 /*
 8 基于map
 9 复杂度 nlogn
10 查询复杂度 logn 
11 需要排序,所以需要重载 < ,需要algorithm 
12 */ 
13 template<class T>
14 class Disperse{
15     public:
16         map<T,int>* maps;
17         int* trans_array;
18         int init_num;//离散化初始值 
19         int max_num;//离散化之后的最大数 
20         T *a; 
21         
22         //b为需要离散化的数组,n为数组大小
23         //数组从0开始,init_n为离散化初始值,默认为0 
24         void Creat(const T b[],int n,int init_n=0){
25             a=new T[n];
26             memcpy(a,b,sizeof(T)*n);
27             maps=new map<T,int>();
28             maps->clear();
29             sort(a,a+n);
30             max_num=init_n-1;
31             init_num=init_n;
32             for(int i=0;i<n;++i){
33                 if(i!=0&&a[i]==a[i-1])
34                     continue;
35                 (*maps)[a[i]]=++max_num;
36             }
37         }
38         
39         int get(const T& p){
40             return (*maps)[p];
41         }
42 };
43 int a[]={9000000,8000000,7000000,6000000,5000000,4000000,3000000,2000000,2000000,3000000,2000000,1000000};
44 
45 Disperse<int> dis;
46 int main(){
47     dis.Creat(a,12,1);//离散化a数组的12个元素,离散标号最小为1
48     for(int i=0;i<12;i++){
49         cout<<a[i]<<" "<<dis.get(a[i])<<endl;
50     } 
51     return 0;
52 }

不保证没有BUG......

效果:

 

转载于:https://www.cnblogs.com/xfww/p/8334982.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值