priority_queue

LeeteCode 347.Top K Frequent Elements

本题要注意的是语法上的东西: priority_queue 、pair

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
vector<int> result;
unordered_map<int, int> mapNum;
for (auto num : nums) {
mapNum[num]++;
}
priority_queue<pair<int, int> > pq;
for(auto num : mapNum) {
pq.push({num.second, num.first});
}
while(k--) {
result.push_back(pq.top().second);
pq.pop();
}
return result;
}
};

range for 中 auto 后面要不要接 &

如果需要修改容器中的元素,可以使用 auto&

1
2
3
4
vector<int> nums;
for (auto& num : nums) {
num *= 2;
}

下面这段code是错误的,因为它向遍历的容器中添加了元素。

1
2
3
4
vector<int> nums;
for (auto num : nums) {
nums.push_back(1);
}

不能在范围for循环中向vector对象添加元素。但凡使用了迭代器的循环体,都不要向迭代器所属的容器添加/删除元素reference: 《C++ primer》 p99 p315 p316

pair

first、second 是 pair 的 两个 public 数据成员

列表初始化

pair<string, int> author{“zhhp”, 1001};

用make_pair生成pair对象

make_pair(v1, v2) 返回一个用v1, v2初始化的pair。 pair的类型从v1和v2的类型推断出来。

0%