一:题目
二:上码
class Solution {
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int,int> m; //我们选用unordered_map 是因为其底层实现是哈希表,那么其
//增删效率和查询效率较高
unordered_map<int,int>:: iterator mt;
multimap<int,int>mm;//这个容器中的key值不去重,其他的用法跟map一致
multimap<int,int>:: reverse_iterator mmt;
vector<int> ans;
for(int i = 0; i < nums.size(); i++) {
m[nums[i]]++;
}
for(mt = m.begin(); mt != m.end(); mt++) {
int a = mt->second;
int b = mt->first;
mm.insert(make_pair(a,b));//将每个key值和其个数放入一个
//不去重的 新的容器中(并将个数)
} //作为新的key值
for(mmt = mm.rbegin(); mmt != mm.rend(); mmt++) {
if(k != 0){
ans.push_back(mmt->second);
k--;
}
}
return ans;
}
};
三:关于multimap的使用
1:初始化
multimap<string, int> mapStudent;//创建map
2:插入数据
mapStudent.insert(pair<string, int>("student_one", 22));
mapStudent.insert(pair<string, int>("student_two", 25));
mapStudent.insert(pair<string, int>("student_three", 21));
或者使用make_pair
map<string, int> mapStudent;
mapStudent.insert(make_pair("student_one", 22));
mapStudent.insert(make_pair("student_two", 25));
mapStudent.insert(make_pair("student_three", 21));
3:遍历容器
(1):正向的遍历
//使用前向迭代器遍历map
map<string, int>::iterator iter;
for (iter = mapStudent.begin(); iter != mapStudent.end(); iter++)
cout << iter->first << " " << iter->second << endl;
(2):逆向的遍历
map<string, int>::reverse_iterator iter;
for (iter = mapStudent.rbegin(); iter != mapStudent.rend(); iter++)
cout << iter->first << " " << iter->second << endl; //反向遍历
(3):针对正向遍历 可以不用迭代器 可以用 auto 关键字
for (auto it = mapStudent.begin(); it != mapStudent.end(); it++)
cout << it->first << " " << it->second << endl; //遍历
如有疑问 请留言!!! 一个人走的很快 但团结协作走的更远