Level 2 · STL

STL 中的 set 与 map

set 处理"集合 / 去重 / 排序",map 处理"键值对 / 计数"。

一、互动演示:set 自动去重 + 自动排序

往 set 里插数。重复的会被忽略,留下的永远是去重 + 升序的。

二、set 与 map 对比

setmap
存什么单个值(唯一)键值对 key→value(键唯一)
顺序按值升序按键升序
典型用途去重、判存在计数、查表
底层 / 复杂度红黑树,插入/删除/查找 O(log N)

三、参考代码:set 去重 + map 计数

#include <set>
#include <map>
using namespace std;

// ① set:输入若干数,去重 + 升序输出
set<int> s;
int x;
while (cin >> x) s.insert(x);   // 重复自动忽略
for (int v : s) cout << v << " ";

// ② map:统计每个单词出现次数
map<string, int> cnt;
string w;
while (cin >> w) cnt[w]++;       // 不存在则自动建为 0 再 +1
for (auto& kv : cnt)
    cout << kv.first << " " << kv.second << "\n";

神技:cnt[key]++ —— key 不存在会自动新建并初始化为 0,是计数的最常用写法。