map 与 set容器的应用--话题焦点人物

unordered_map(无序映射/哈希表)

unordered_map<int, int> b_n

  • 用途:记录每个人被提及的次数

  • 底层实现:哈希表

  • 时间复杂度:平均 O(1) 的插入、查找

  • 相关操作:

    • b_n[b]++:自动创建键值对并递增

unordered_map<int, set<int>> b_a

  • 用途:记录谁被谁提及(被提及者 -> 提及者的集合)

  • 嵌套容器 :值类型是 set<int>

  • 相关操作:

    • b_a[b].insert(a):向集合中插入元素

set(有序集合)

cpp 复制代码
unordered_map<int, set<int>> b_a;
//                ^^^^^^^^
//                红黑树实现,元素自动排序且去重
  • 底层实现:红黑树(平衡二叉搜索树)

  • 特点

    • 元素自动按升序排列

    • 不允许重复元素

    • 插入、删除、查找:O(log n)

基于范围的 for 循环(Range-based for loop)

cpp 复制代码
for(const auto& p : b_n) {  // C++11 特性
    if(p.second > m) {
        m = p.second;
        ans = p.first;
    }
}
  • auto:自动类型推导,p 的实际类型是 pair<const int, int>

  • const auto&:const 引用,避免拷贝

  • p.first:被提及者的编号

  • p.second:被提及的次数

cpp 复制代码
for(int t : b_a[ans])  // 遍历 set 中的元素(自动升序)
    cout << t << ' ';

std::pair 的使用

在遍历 unordered_map 时,ppair 类型:

cpp 复制代码
p.first   // 键(key)
p.second  // 值(value)

STL 容器的综合应用

bash 复制代码
p.first   // 键(key)
p.second  // 值(value)

AC代码:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

int main(){
    int N;
    cin >> N;
    unordered_map<int,int>b_n;//被提及的人与次数
    unordered_map<int,set<int>>b_a;//记录谁被谁提及
    while(N--){
        int a,k;
        cin >> a >> k;
        while(k--){
            int b;
            cin >> b;
            b_n[b]++;
            b_a[b].insert(a);//set自动排序去重
        }
    }
    int m = -1,ans = -1;
    for(const auto&p : b_n){//找出被提及次数最多的人
        if(p.second > m){
            m = p.second;
            ans = p.first;
        }
    }
    cout << ans << endl;
    for(int t : b_a[ans]) cout << t << ' ';
    return 0;
}
相关推荐
闪电悠米9 分钟前
力扣hot100-240.搜索二维矩阵2-单调性剪枝详解
数据结构·算法·leetcode·矩阵·哈希算法
雨落在了我的手上20 分钟前
Java数据结构(九):栈和队列
java·开发语言·数据结构
春生野草1 小时前
个人笔记--大顶堆和基数排序
java·数据结构·算法
paeamecium3 小时前
【PAT甲级真题】- Rational Sum (20)
数据结构·c++·python·算法·pat考试·pat
Highcharts.js9 小时前
教程:基于 React + Highcharts 构建一个单页应用程序、按需数据拉取与图表渲染
开发语言·前端·数据结构·react.js·前端框架·highcharts·页面应用
稚南城才子,乌衣巷风流15 小时前
动态开点:原理、实现与应用场景
数据结构·算法
yyds_yyd_1008615 小时前
1464. 数组中两元素的最大乘积(2026.07.27)
数据结构·c++·算法·leetcode
白白白小纯21 小时前
算法篇—返回倒数第k个节点
c语言·数据结构·算法·leetcode
无忧.芙桃21 小时前
数据结构之堆
c语言·数据结构·c++·算法·
小蒋学算法21 小时前
算法-删除元素后最大固定点数目-典型最长增长序列算法
数据结构·算法