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;
}
相关推荐
生成论实验室2 小时前
《事件关系阴阳博弈动力学:识势应势之道》第二篇:阴阳博弈——认知的动力学基础
数据结构·人工智能·科技·神经网络·算法
li1670902702 小时前
第二十七章:智能指针
c语言·数据结构·c++·visual studio
代码中介商4 小时前
数据结构开篇:从问题到解决方案
数据结构
AKDreamer_HeXY5 小时前
QOJ 12255 - 36 Puzzle 题解
数据结构·c++·数学·算法·icpc·qoj
Rabitebla5 小时前
vector 的骨架:三根指针、模板陷阱与迭代器失效的第一现场
开发语言·数据结构·c++·算法
Sarvartha6 小时前
N 个字符串最长公共子序列(LCS)求解问题
数据结构·算法
m0_629494736 小时前
LeetCode 热题 100-----16.除了自身以外数组的乘积
数据结构·算法·leetcode
迷途之人不知返7 小时前
优先级队列:priority_queue
数据结构·c++
jieyucx7 小时前
Go 零基础数据结构:顺序表(像「排抽屉」一样学增删改查)
java·数据结构·golang