算法C++入门day1(哈希表)

1.哈希表定义

头文件:#include<unordered_map> 

键值对都为int类型的哈希表

unordered_map<int, int> hashtable;

2.find方法

从哈希表中寻找目标

auto it = hashtable.find(target);

target为目标  如果没找到 那么 it == hashtable.end();

3.哈希表添加元素

(1)通过下标添加

         hashtable[ 1 ] = 2;

   (2) insert函数添加 (可覆盖原有元素)

        hashtable.insert( {1,2} );

        cout << hashtable[1] << endl; //输出结果为2

4.可复制原有哈希表创建新的哈希表

   unordered_map<int, int> hmap{ {1,10},{2,12},{3,13} };
   unordered_map<int, int> hmap1(hmap);

实际上哈希表的存放可以看作一个键值对。例如我当前要将小明的成绩记录到哈希表中,语文:90 数学:100,那么我应该这样写

#include <unordered_map>

unordered_map<string,int> score;

score["Chinese"] = 90;

score.insert( {"math”,100 } );

如果现在我要查他的物理成绩 那么auto a=score.find("物理");

若a == score.end(),那么查找失败

问题来了,如果我现在想知道小明哪一门考了100,代码应该怎么写呢?

int scoreToFind=100;

for (const auto& pair : studentScores) {
        if (pair.second == scoreToFind) {
            subject = pair.first;
            found = true;
            break; // 找到第一个匹配项后退出循环
        }

}


算法题:

一、两数之和  不用暴力解

这题就是哈希函数的简单运用

二、字母异位词分组

 注意点:

1.用到了sort函数 将字母排序后再比较

2.push_back函数 将元素放入容器末位

三、最长连续序列

注意点:1.用集合set 会自动按从小到大排序

2.count函数set查找集合中是否存在目标值

3.该算法思想为先判断该值是不是连续序列的第一个元素 如果不是则跳过,如果是再进行计数比较

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值