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;
}
相关推荐
San813_LDD1 天前
[量化]《虚函数调用时间复杂度完全解析:为什么是 O(1) 以及它的真实代价》
java·数据结构·算法
起个破名想半天了1 天前
算法与数据结构之Floyd算法
数据结构·算法
小七在进步1 天前
数据结构:线性表之顺序表
c语言·数据结构·算法
Never_love_MCI!1 天前
洛谷P15799 [GESP202603 五级] 找数 题解
数据结构·c++·算法
一只齐刘海的猫1 天前
【Leetcode】三数之和
数据结构·算法·leetcode
lightqjx1 天前
【算法】数据结构_扩展域并查集
数据结构·算法·并查集·扩展域并查集
San813_LDD1 天前
[量化]《多线程数据同步精讲:std::mutex 的底层原理与最佳实践》
c语言·数据结构
Ricky_Theseus1 天前
栈 & 队列 应用场景
数据结构·c++
ysu_03141 天前
leetcode数据结构与算法5~7:链表双指针与二级指针
数据结构·学习·算法·leetcode·链表
小欣加油1 天前
leetcode542 01矩阵
数据结构·c++·算法·leetcode·矩阵·bfs