众所周知,map
很慢,有时候会超时,所以我想到了这种比 map
快但又能实现 map
功能的 map
。
因为 unordered_map
比 map
快很多,又能实现 map
的大多数功能,所以我们使用 unordered_map
代替 map
。
但 unordered_map
是 unordered 的,所以在遍历时无法有序地输出,如下:
for(unordered_map<int,int>::iterator it=mp.begin();it!=mp.end();it++){
if(sum!=0){
a[++tot]={lst,it->first-1,sum};
}
sum+=it->second;
lst=it->first;
}
对于普通的 map
,遍历是有序的,可对于 unordered_map
却不是这样。
所以对于 unordered_map
,我们这样操作:
pair<int,int>t[200010];
for(auto it=mp.begin();it!=mp.end();it++){
t[++cnt]={it->first,it->second};
}
stable_sort(t+1,t+cnt+1);
for(int i=1;i<=cnt;i++){
pair<int,int>* it=&t[i];
if(sum!=0){
a[++tot]={lst,it->first-1,sum};
}
sum+=it->second;
lst=it->first;
}
标签:map,++,sum,一种,lst,unordered,first
From: https://www.cnblogs.com/UserJCY/p/18474567/algorithm_datastruct_map