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;
}
相关推荐
aqiu1111112 小时前
【LeetCode 902】最大为 N 的数字组合 - 详细题解与数位组合思路
数据结构·算法·leetcode·蓝桥杯·数位dp
2601_962297486 小时前
在python3中、下列输出变量a的正确写法是_2020超星大数据Python免费答案
数据结构·python·算法·编程·字符串操作
shehuiyuelaiyuehao8 小时前
算法29,前缀和,除自身以外的数组的乘积
java·数据结构·算法
啵啵啵鱼9 小时前
DS-顺序表
java·数据结构·笔记·后端·链表·obsidian
YSL07012410 小时前
时间复杂度和空间复杂度
数据结构
洋不写bug10 小时前
链表面试笔试经典题目详细解析,题目多解法,复杂度分析
数据结构·链表·面试
白狐_79811 小时前
408 数据结构|KMP做题方法:next、nextval和高频易错点
数据结构·算法
来一碗刘肉面13 小时前
平衡二叉树的删除
数据结构·算法
wabs66613 小时前
关于二叉树【力扣199.二叉树的右视图的思考】
数据结构·c++·算法·leetcode·二叉树·层序遍历
hope_wisdom14 小时前
C/C++数据结构之二叉树的遍历
c语言·数据结构·c++·二叉树·深度优先·广度优先