unordered_map是非常常用也非常实用的一个建立映射的容器。
当我们要用来标记某个基本类型是否出现过时,可以使用unordered_map < typename,bool >这样就建立了一个基本类型到bool型的映射,如果一开始建立之后,默认任何typename类型都是没有出现过的,即任何typename的映射结果都是false。
同样可以建立unordered_map<typename,int> ,即建立基本类型到int的映射,重要的是,默认任何int型的数据的一开始的映射值均为0,这点非常常用,可以直接使用,不用先查找是否出现过。
力扣914. X of a Kind in a Deck of Cards
class Solution {
public:
bool hasGroupsSizeX(vector<int>& deck) {
if(deck.size()==1) return false;
unordered_map<int,int> mp;
for(int i=0;i<deck.size();i++) mp[deck[i]]++;
int ans=mp.begin()->second;
for(auto it=mp.begin();it!=mp.end();it++){
//注意遍历技巧
ans=gcd(ans,it->second);//gcd函数,最好用__gcd(x,y)
if(ans==1) return false;
}
return true;
}
};