STL之哈希表

本文介绍C++ STL中unordered_map和unordered_set的基本用法,包括如何使用unordered_map::count检查元素存在性、unordered_map::find查找元素及unordered_map::size获取哈希表大小等关键操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

unordered_map、unordered_set用法


unordered_map

列举出几个主要的unordered_map的函数,并用程序列子说明:

1、unordered_map::count

#include "iostream"
#include "vector"
#include "string"
#include "queue"
#include "algorithm"
#include "unordered_map"

using namespace std;


int main(){
    unordered_map<string,double>mymap={
        {"w",1},{"e",2},{"r",3},{"t",4}
    };
    string tem[]={"w","s","e","r","t"};
    for(int i=0;i<5;i++){
        if(mymap.count(tem[i])>0)
            cout<<tem[i]<<endl;
    }
}

结果为:
w
e
r
t


2、unordered_map::find

查找是否存在

#include <iostream>
#include <string>
#include <unordered_map>

int main ()
{
  std::unordered_map<std::string,double> mymap = {
     {"mom",5.4},
     {"dad",6.1},
     {"bro",5.9} };

  std::string input;
  std::cout << "who? ";
  getline (std::cin,input);

  std::unordered_map<std::string,double>::const_iterator got = mymap.find (input);

  if ( got == mymap.end() )
    std::cout << "not found";
  else
    std::cout << got->first << " is " << got->second;

  std::cout << std::endl;

  return 0;
}

Possible output:
who? dad
dad is 6.1

3、unordered_map::size

哈希表大小

#include <iostream>
#include <string>
#include <unordered_map>

int main ()
{
  std::unordered_map<std::string,double> mymap = {
       {"milk",2.30},
       {"potatoes",1.90},
       {"eggs",0.40}
  };

  std::cout << "mymap.size() is " << mymap.size() << std::endl;

  return 0;
}

Output:
mymap.size() is 3


unordered_set

与上面类似。目前只需掌握掌握这几种函数即可

STL中使用哈希表的容器有unordered系列关联式容器。这些容器采用了哈希的思想,存储和查找数据的效率非常高,能够达到理想的O(1)。\[2\] unordered系列关联式容器包括unordered_set、unordered_multiset、unordered_map和unordered_multimap。这些容器使用哈希函数将元素映射到桶中,以实现快速的插入、查找和删除操作。\[2\] 此外,还可以使用布隆过滤器来支持删除操作,通过将布隆过滤器中的每个比特位扩展成一个计数器,对应的哈希函数计算出的哈希值对应的计数器进行加减操作,以实现删除操作。\[3\] #### 引用[.reference_title] - *1* [【数据结构】—— 哈希表/STL使用技巧](https://blog.youkuaiyun.com/forever_bryant/article/details/126068847)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [<stl系列>哈希表详解,掌握stl容器从现在开始](https://blog.youkuaiyun.com/weixin_59371851/article/details/126917526)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值