c++的map竟然是有序的!!!
昨天看了一道题
这道题要我们把单词排好序输出,每个单词后面跟上单词出现的顺序。
由于这段时间在学Go语言,所以我就用Go语言来做了,结果超时了,我当时的思路是这样的:
用一个map,存单词和出现次数,用slice存出现过的单词,输入完成后对slice进行排序,然后在将map里的内容输出,为此我还写了一个比较字符串的函数(有点蠢),这个方法,当然超时了。
之后我不服气,想着用c++再做一下试试,兴许c++性能强,就不会超(eee,这个想法也挺蠢的)结果还是超时,于是我就搜一下这个题,发现有人说c++里的map中的key是有序存放的,所以单词放进去就是按字典序排的,最后直接迭代就可以!!!!
所以我最后写出了这样的代码
#include<iostream>
#include<iomanip>
#include<cmath>
#include<string>
#include<vector>
#include<map>
#include<stdio.h>
using namespace std;
int com(string a,string b){
int minlen = a.length()<b.length()? a.length():b.length();
int i;
for(i=0;i<minlen;i++){
if(a[i]!=b[i]){
return (int)(b[i]-a[i]);
}
}
return b.length()-a.length();
}
int main(){
int i,j;
int t;
cin>>t;
while(t--){
int n;
cin>>n;
map<string,int>mymap;
while(n--){
string str;
cin>>str;
mymap[str]++;
}
int nums=mymap.size();
printf("%d\n",nums);
map<string,int>::iterator iter;
for(iter = mymap.begin();iter!=mymap.end();iter++){
cout<<iter->first<<": "<<iter->second<<endl;
}
cout<<endl;
}
}
由此我又去探究了一下,发现,原来c++里的map相当于Java里的TreeMap,他们都是有序的而而c++中的hash_map和unordered_map是无序的。
Go语言中的map更怪了,遍历map的时候,它会使用随机数,所以你拿到的序列是随机的,要想用Go语言实现这道题的要求,可以转成切片,然后进行排序,不过呵呵,我用Go写没有AC。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)