7-50 点赞

微博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持。每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性。本题就要求你写个程序,通过统计一个人点赞的纪录,分析这个人的特性。

输入格式:

输出格式:

统计所有被点赞的博文中最常出现的那个特性标签,在一行中输出它的编号和出现次数,数字间隔1个空格。如果有并列,则输出编号最大的那个。

输入样例:

4
3 889 233 2
5 100 3 233 2 73
4 3 73 889 2
2 233 123

输出样例:

233 3

ACcode:

#include <bits/stdc++.h>

using namespace std;

int main(){
    int n;
    cin >> n;   //微博条数
    map<int, int> tagCount; // 使用map来统计每个特性标签的出现次数

    for(int i=0; i<n; i++){
        int k;
        cin >> k;   //一条微博中的特性个数
        for(int j=0; j<k; j++){
            int tag;    //标签特性编号
            cin >> tag;
            tagCount[tag]++;
        }
    }
    int maxTag = -1;
    int maxCount = -1;
    //遍历 map
    for(auto it=tagCount.begin(); it!=tagCount.end(); it++){
        if(it->second > maxCount || (it->second == maxCount && it->first > maxTag)){
            maxTag = it->first;
            maxCount = it->second;
        }
    }
    cout << maxTag << " " << maxCount;


    return 0;
}

1. 为什么用map

使用map的主要原因是我们需要统计每个特性标签的出现次数,并且要根据标签编号快速获取对应的计数值。map 是一种关联容器,它将键值与值关联起来,使得通过键(这里是特性标签编号)可以快速地找到对应的值(出现次数)。这样可以有效地处理统计问题。

2. map的遍历方式

for (auto it = tagCount.begin(); it != tagCount.end(); ++it) {
    //使用 auto 的好处是,编译器会根据右边的初始化值自动推断出 it 的类型,使代码更加简洁和易读。在这种情况下,it 是一个 std::map<int, int>::iterator 类型的迭代器,指向 tagCount 这个 map 的元素。
}

3.map迭代器用法

在 C++ 中,map 是一种关联容器,其中的元素是按键值对的形式存储的。每个元素都有一个键(key)和一个值(value)。在遍历 map 时,你可以使用迭代器(iterator)来访问每个键值对。
it->first:这是一个迭代器的用法,用于访问当前迭代器所指向的键(即键值对中的“key”)。
it->second:同样,这也是一个迭代器的用法,用于访问当前迭代器所指向的值(即键值对中的“value”)。

4.tagCount.end()指向哪里?

tagCount.end() 指向的是 map 的“超越尾部”的位置,而不是最后一个元素。在 C++ 的容器中,begin() 指向第一个元素,而 end() 指向的是超越尾部的位置,它不包含任何有效元素。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值