首页 > 其他分享 >6.14 哈希表

6.14 哈希表

时间:2024-06-14 22:33:23浏览次数:14  
标签:map 哈希 ++ cin 6.14 int heap unordered

采用邻接表创建无向图G ,依次输出各顶点的度。

输入格式:

输入第一行中给出2个整数i(0<i≤10),j(j≥0),分别为图G的顶点数和边数。
输入第二行为顶点的信息,每个顶点只能用一个字符表示。
依次输入j行,每行输入一条边依附的顶点。

输出格式:

依次输出各顶点的度,行末没有最后的空格。

输入样例:

5 7
ABCDE
AB
AD
BC
BE
CD
CE
DE

输出样例:

2 3 3 3 3

 

#include <iostream>
#include <unordered_map> // 更为高效的哈希表实现
using namespace std;

int main() {
    int n, m;
    string s;
    unordered_map<char, int> heap; // 使用unordered_map提高查询速度

    // 输入部分
    cin >> n >> m;
    cin >> s;
    
    for (int i = 0; i < m; ++i) {
        string x;
        cin >> x;
        heap[x[0]]++;
        heap[x[1]]++;
    }

    // 输出部分
    for (int i = 0; i < s.size(); ++i) {
        if (i > 0) {
            cout << " ";
        }
        cout << heap[s[i]];
    }
    cout << endl;

    return 0;
}

 

使用说明

  • unordered_map<char, int> heap: 定义了一个无序映射,它的键是字符,值是整数。这个映射用于记录每个字符在边列表中出现的次数。
  • cin >> n >> m: 读取字符串长度和边的数量。
  • cin >> s: 读取字符串 s
  • for (int i = 0; i < m; ++i): 循环读取 m 条边,并更新每个字符在 heap 中的频次。
  • for (int i = 0; i < s.size(); ++i): 遍历字符串 s,根据 heap 中记录的频次输出每个字符的出现次数,并在不同字符之间加空格。

优势

使用 unordered_map 的主要优势在于其常量时间复杂度的插入和查找操作,这在处理大量数据时非常有用。相比之下,map 基于红黑树实现,其插入和查找操作的时间复杂度为 O(log n)。

总结

这段代码通过使用 unordered_map 提高了查询效率,使其更适合处理较大规模的数据集。在大多数情况下,unordered_map 会比 map 提供更好的性能,特别是在需要频繁插入和查找操作的场景中。

标签:map,哈希,++,cin,6.14,int,heap,unordered
From: https://www.cnblogs.com/sly-345/p/18248766

相关文章

  • 6.14BFS,DFS
    7-1列出联通集给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集。假设顶点从0到N−1编号。进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点。输入格式:输入第1行给出2个整数N(0<N≤10)和E,分别是图的顶点数和边数。随后E行,每行给出......
  • 6.14内容
    今天完成了数据库的实验四  数据库的备份和恢复实验四数据库的备份和恢复一、实验目的:熟悉并掌握数据库备份和恢复的原理和操作。二、实验要求:掌握存储设备的创建、使用。掌握数据库中数据的导入导出操作。掌握数据上的备份和恢复操作。掌握数据库备份策略的制定原理和......
  • 代码随想录第7天 |● 454.四数相加II●383. 赎金信●15. 三数之和●18. 四数之和●哈
    题目:454.四数相加Ⅱ思路:0.知道用map,但是map存啥1.暴力法,四层循环遍历哈哈哈哈2.分而治之,化繁为简,四个数组a,b,c,d分成两组,题目求符合要求的元祖个数,所以将a+b的值和出现次数存储,之后遍历查找c+d中0-(c+d)出现的次数,统计为结果时间复杂度:O(n^2)空间复杂度:O(n^2),最坏情况下A......
  • 6.14《构建之法》
    再次深入《构建之法》,我仿佛踏上了一场对软件工程领域深度探索与自我反思的旅程。这本书不仅是一份实践指南,更像是一位智者,在我耳边低语,引导我理解软件开发的本质,以及如何在这个充满挑战与机遇的行业中稳健前行。以下是我在这次重读过程中获得的新见解和深化的感悟。###1.**软......
  • 代码随想录 算法训练营d7 哈希表 Leetcode454 四数相加2 Leetcode383 赎金信 Leetcode
    Leetcode454四数相加2 题目链接简单理解四个数组的数构成元组 相加为0思想:参考力扣第一题两数之和 才用哈希表解决问题通过将ab数组之和存储到哈希表中,并记录次数再通过计算-(c+d)去匹配哈希表如果存在那么count+=次数即可classSolution{publicintfour......
  • c++哈希表hash_table的深度学习(hash_map,un和hash_set的底层实现)
    什么是哈希表?哈希表(HashTable)是一种数据结构,它使用哈希函数将键(key)映射到桶(bucket)或槽(slot)中,可以直接通过相应的键值直接对数据进行访问,高效的插入,删除,查找 哈希表的组成部分和特性哈希函数:哈希函数接受一个键作为输入,并返回一个索引值(通常是一个整数),该索引值用于确定键......
  • 代码随想录第6天 | ●哈希表理论基础●242.有效的字母异位词●349. 两个数组的交集●2
    题目:242.有效的字母异位词思路:1.ASCII和哈希函数,存入数组,比较数组相等否2.首先选择数据结构,题目只有小写字母,ASCII连续,选用数组,一个字符串遍历,在哈希数组中存入字母出现频率,第二个字符串遍历,做减法。(不需要记ASCII,直接减字母,编译器自己算)时间复杂度:O(n)空间复杂度:O(1)坑......
  • 【力扣真题】3.哈希表|算法真题程序设计数据结构考研保研复试机试面试秋招春招蓝桥杯
    242.有效的字母异位词给定两个字符串s和t,编写一个函数来判断t是否是s的字母异位词。示例1:输入:s=“anagram”,t=“nagaram”输出:true示例2:输入:s=“rat”,t=“car”输出:false说明:你可以假设字符串只包含小写字母。力扣题目链接思......
  • 代码随想录 算法训练营 d6 哈希表 Leetcode242 有效的字母异位词 Leetcode349 两个数
    哈希表很重要哈希表哈希表场景一般哈希表都是用来快速判断一个元素是否出现集合里一般来说数组模拟哈希set 哈希map不同的场景 当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。但是哈希法也是牺牲了空间换取了时间,因为我们要使用额外的数组,se......
  • (算法)判断是否互为字符重排——<哈希表>
    1.题⽬链接:⾯试01.02.判定是否互为字符重排2.题⽬描述:3.解法(哈希表): 算法思路: 1.当两个字符串的⻓度不相等的时候,是不可能构成互相重排的,直接返回false;2.如果两个字符串能够构成互相重排,那么每个字符串中「各个字符」出现的「次数」⼀定是相同的。因此,我们可以......