c++ map和set例题
时间: 2025-02-06 12:10:51 浏览: 56
### C++ 中 `map` 和 `set` 的示例题目解析
#### 题目一:查找最频繁的单词
给定一个字符串数组 `words` 和整数 `k`,返回频率最高的前 `k` 个单词。如果多个单词具有相同的频率,则按字典顺序排列。
```cpp
class Solution {
public:
vector<string> topKFrequent(vector<string>& words, int k) {
// 统计次数
map<string, int> countMap;
for(auto& str : words) {
countMap[str]++;
}
// 排序
multimap<int, string, greater<int>> sortMap;
for(auto& kv : countMap) {
sortMap.insert(make_pair(kv.second, kv.first));
}
// 将排好序的结果放入向量中并返回
vector<string> result;
for(auto& kv : sortMap) {
if(k) {
result.push_back(kv.second);
k--;
}
}
return result;
}
};
```
此代码展示了如何使用 `map` 来统计词频,并通过 `multimap` 对这些项按照频率降序排序[^1]。
#### 题目二:两个数组的交集
给出两个整型数组 `nums1` 和 `nums2`,请编写一个程序计算它们的交集。每个元素在结果里应该只出现一次,可以不考虑输出结果的顺序。
```cpp
#include <unordered_set>
using namespace std;
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_set<int> set1(nums1.begin(), nums1.end());
unordered_set<int> resultSet;
for(int num : nums2){
if(set1.find(num)!=set1.end()){
resultSet.insert(num);
}
}
return vector<int>(resultSet.begin(), resultSet.end());
}
```
这里利用了 `unordered_set` 数据结构来高效处理集合运算问题[^5]。
#### 题目三:移除重复字符
设计一种算法,删除未排序链表中的重复节点。保留原列表中最先出现的那个节点实例。
```cpp
struct ListNode {
char val;
struct ListNode *next;
};
void removeDuplicateNodes(ListNode* head) {
if (!head || !head->next) return;
unordered_set<char> seen{head->val};
auto current = head;
while(current && current->next){
auto nextNode = current->next;
if(seen.count(nextNode->val)){
current->next = nextNode->next;
}else{
seen.emplace(nextNode->val);
current = nextNode;
}
}
}
```
这段代码说明了怎样借助于 `unordered_set` 实现去重逻辑[^3]。
阅读全文
相关推荐

















