为什么unordered_map会比数组更慢?
//kruscal class Solution { public: int find(unordered_map<int,int>& parent,int& x){//传引用更快,特别是递归中 /*1 while(parent[x]!=x){ //向上找到最高的父亲(父亲为自己) x=parent[x];//parent[parent[x]];每次执行链式查询,不改变p[x] } return parent[x]; }*/ /*2 int n=parent[x]; if(parent[x]!=x) //向上找到最高的父亲 n=find(parent,parent[x]);//每次执行链式查询,不改变p[x] return n;//parent[x]; }*/ if(parent[x]!=x) //向上找到最高的父亲 parent[x]=find(parent,parent[x]); //每次执行改变p[x]为最高的父亲,缩短路径 return parent[x]; } int miniSpanningTree(int n, int m, vector<vector<int>>& cost) { unordered_map<int,int> parent; for(int i=0;i<=n;i++)//初始父亲设置为自己 parent[i]=i; sort(cost.begin(),cost.end(),[](vector<int>& a, vector<int>& b) { return a[2]<b[2]; //边权递增排序 }); int res=0; for(int i=0;i<cost.size();i++){ int x=cost[i][0]; int y=cost[i][1]; int z=cost[i][2]; int px=find(parent,x);//查找x的最上边父亲 int py=find(parent,y);// 查找y的最上边父亲 if(px!=py){//如果二者不在同一个集合 res+=z;//边加入 parent[px]=py;//设置二者在同一个集合 } } return res; } };