c++11 unordered_map使用

C++11 unordered_map使用哈希实现,map使用红黑树实现的 C++11 引入了一套标准库中的哈希函数和哈希容器,用于提供高效的哈希功能。这些特性位于和头文件中。C++11 中的哈希容器是基于散列表实现的,可以快速插入、查找和删除元素,并具有平均常数时间复杂度的操作。哈希容器包括和,分别对应无序映射(键-值对)和无序集合(唯一值)。使用哈希容器需要注意以下几点:哈希函数:为了支持自定义类型的哈希,需要提供一个哈希函数,该函数将对象映射到整数值。可以通过定义std::hash的特化版本来实现自定义类型的哈希函数。 阅读详情

前几天同事提起C++没有hash_map,听到我就笑了:这位同事的知识该有多久没有更新了呀!于是决定网上找个C++ unordered_map使用示例给他,发现百度出来的结果有些作者自己都说无法编译通过,有的示例我亲测无法编译通过的。于是决定按照最朴素的用法给他写了个示例,源码如下:

#include<string>
#include<iostream>
#include<unordered_map>
using namespace std;


class   search_key_t{
public:
    search_key_t(long long most_significant_64, int least_significant_32):
        ms64(most_significant_64), ls32(least_significant_32)
    {
    }


    bool operator==(const search_key_t &sk) const
    {
        return ms64 == sk.ms64 && ls32 == sk.ls32;
    }


    long long   ms64;
    int         ls32;
};




struct search_key_hasher{
    size_t operator()(const search_key_t &p) const
    {
        size_t hash = p.ls32;
        hash ^= (p.ms64 >> 32);
        hash ^= (int)p.ms64;
        return hash;
    }
};


int main()
{
    typedef std::unordered_map<search_key_t, int, search_key_hasher> hash_map;
    hash_map hm;
    for(int i = 0; i < 10; ++i)
    {
        search_key_t k(i, i);
        hm[k] = i;
    }


    for(hash_map::iterator iter = hm.begin(); iter != hm.end(); iter++)
    {
        const search_key_t &k = iter->first;
        cout << "k.ms64=" << k.ms64 << ", k.ls32=" << k.ls32 << ", val=" << iter->second << endl;
    }


    return 0;

}

上述是所有代码,其实unordered_map使用自定义类型作为key时,主要需要做两件事:

1. 为key类型提供一个equal运算符,

2. 提供一个hash函数。

本人使用gcc-4.8.5编译器,亲测是这样的(这里本人提供的hash函数没有进行任何考量,请按照自己需求进行改动):                                                                                                                                                                                        
[heron@heron.chogori server_routines]# g++ tom.cc -std=gnu++11
[heron@heron.chogori server_routines]# ./a.out 
k.ms64=9, k.ls32=9, val=9
k.ms64=8, k.ls32=8, val=8
k.ms64=7, k.ls32=7, val=7
k.ms64=6, k.ls32=6, val=6
k.ms64=5, k.ls32=5, val=5
k.ms64=4, k.ls32=4, val=4
k.ms64=3, k.ls32=3, val=3
k.ms64=2, k.ls32=2, val=2
k.ms64=1, k.ls32=1, val=1
k.ms64=0, k.ls32=0, val=0
[heron@heron.chogori server_routines]# 
sklearn2pmml xgboost缺失值(missing)处理的坑 sklearn2pmml xgboost缺失值(missing)如何处理 今天同事在部署xgboost pmml模型时遇到了大坑,线上spark预测和本地python预测结果怎么都不对应,记录一下处理过程。 看了下同事的代码,貌似也没有问题 from sklearn2pmml import PMMLPipeline from sklearn2pmml import sklearn2pmml fro... 阅读详情

相关推荐

微带天线理论学习笔记(1)

微带天线的概念是由Deschamps于1953年提出来的,它是在一块厚度远小于工作波长的介质基片的一面敷以金属辐射片、一面全部敷以金属薄层作接地板而成。辐射片可以根据不同的要求设计成各种形状。微带天线具有质量轻、体积小和易于制造等优点,广泛应用于个人无线通信中。

qq_36521926的博客 6177

C++ std::unordered_map

unordered_map底层基于哈希表实现,拥有快速检索的功能。 unordered_map是STL中的一种关联容器。容器中元素element成对出现(std::pair),element.first是该元素的键-key,容器element.second是该元素的键的值-value。 unordered_map中每个key是唯一的,插入和查询速度接近于O(1)(在没有冲突的情况下),但是其内部元素的排列顺序是无序的。 1. unordered_map 底层原理2. 功能函数2.1 构造函数2.2..

肥猫王德福的博客 2万+

【华为OD机试真题 新系统】1009、企业内部门的最大层级 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS)

【华为OD机试真题 新系统】1009、企业内部门的最大层级 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2026e卷,od机试,2026E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2026华为od,如何备战

KJ.JK 1346

unordered_map详解和性能分析

std::unordered_mapC++标准库中的一个关联容器,它可以存储一组键值对,并且支持快速的查找、插入和删除操作。class Ty,std::hash是一个模板类,它接受一个类型参数T,用于指定需要哈希的对象类型。还提供了一个函数调用运算符(operator()),用于计算对象的哈希值。perator()接受一个常量引用key,用于指定需要计算哈希值的对象。它返回一个类型的哈希值,表示对象在哈希表中的桶位置。实现一个哈希函数。

上官宏竹的专栏 2万+

C++开发必备之stl进阶(八 unordered_map

假设我们有一个自定义类型作为键,需要自定义哈希函数。int x;int y;// 自定义哈希函数return 0;如果需要不同的键比较逻辑,可以通过提供自定义比较函数来实现。然而,对于,键比较函数需要用于处理哈希冲突时键的相等性判断,通常不需要修改,除非有特殊需求。当使用自定义类型作为键时,需要自定义哈希函数和键比较函数。// 自定义键类型int age;// 自定义哈希函数return 0;有时需要对数据进行分区或分组,可以结合使用和算法。

4193

std::unordered_map(C++)

定义:std::unordered_map<Key, T, Hash, KeyEqual, Allocator> 是一个基于哈希表(hash table)实现的键值对容器,提供平均 O(1) 的查找、插入和删除性能。特点:无序:元素按哈希值分布在若干“桶”(bucket)中,不保证遍历顺序。唯一键:同一个键最多只能出现一次;如果插入已存在的键,默认不覆盖(可用 operator[] 或 at 修改)。可自定义:支持自定义哈希函数和键相等比较器,也可指定内存分配器。

強雲的博客 2182

std::unordered_map

std::unordered_map基础操作代码示例

TimerSea的博客 3574

如何在Dev-Cpp中使用C++11中的函数:stoi、to_string、unordered_mapunordered_set、auto

如果想要在Dev-Cpp里面使用C++11特性的函数,比如刷算法中常用的stoi、to_string、unordered_mapunordered_set、auto这些,需要在设置里面让dev支持c++11~需要这样做~ 在工具-编译选项-编译器-编译时加入这个命令“-std=c++11”:   然后就可以愉快的用这些好用到飞起的C++11函数啦啦啦啦啦啦~~~...

柳婼 の blog 1万+

C++11中std unordered map使用

C++11中std unordered map使用

hddryjv的博客 423

C++11 STL: unordered_map使用入门

背景: hash_map 不是C++ 11 的标准 在vc中编译时: #include <hash_map> using namespce stdext; hash_map<int, int> myhash; 在GCC中编译时: #include <ext/hash_map> using namespace _gnu_cxx; hash_map&l...

lobster_wang的博客 2334

C++11 unordered_map使用

C++11 unordered_map使用

Where there is life, there is hope. 396

C++11中std::unordered_map使用

C++11中std::unordered_map使用

网络资源是无限的 4万+

C++11map/multimap/unordered_map以及对应set使用回顾

前言:今天Leetcode遇到一道题很有意思,方法还是老方法,但是得换个新数据结构才能以很简单的算法AC,这就涉及到多个基础数据结构的组合,本节主要回顾一下哈希表和哈希集合在力扣中的基础用法 文章目录使用场景及概述1 映射容器1.1 `map`1.2 `multimap`1.3 `unordered_map`参考文献 使用场景及概述 当你想通过非遍历或非穷举的方式,快速判断一个元素是否出现集合里,Hash Table是非常合适的数据结构 这里先总述映射和集合的性质 映射 底层实现 是否有序 映射.

SL_World的博客 983

C++11 unordered_set与unordered_map使用结构体

#include <iostream> #include <cstdio> #include <set> #include <unordered_set> #include <unordered_map> using namespace std; struct Node { Node() {} Node(int _x, int _y):x(_x), y(_y) {} int x, y; bool operat...

hys__handsome的博客 1640

C++unordered_mapunordered_set的使用

unordered系列关联式容器在C++98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到O(logN),即最差情况下需要比较红黑树的高度次,当树中的节点非常多时,查询效率也不理想。

Sxy_wspsby的博客 1331

C++进阶--unordered_set、unordered_map的介绍和使用

1.unordered_set是不按特定顺序存储键值的关联式容器,其允许通过键值快速的索引到对应的元素。2.在unordered_set中,元素的值同时也是唯一的标识它的key。3.在内部,unordered_set中的元素没有按照任何特定的顺序排序,为了能在常数范围内找到指定的key,unordered_set将相同哈希值的键值放在相同的桶中。4.unordered_set容器通过key访问单个元素要比set快,但它通常在遍历元素子集的范围迭代方面效率较低。5.它的迭代器至少是前向迭代器。

sushang的博客 4579

unordered_map的用法

c++11以前要使用unordered_map需要      #include//在unordered_map之前加上tr1库名,      using namespace std::tr1;//与此同时需要加上命名空间 [查找元素是否存在]     若有unordered_map mp;查找x是否在map中     方法1:  若存在  mp.find(x)!=mp.end()

u012530451的专栏 4万+

数据结构进阶 unordered_set unordered_map使用

介绍高阶数据结构 unorder_set unorder_map使用

小萌新的博客 1338

【STL系列】unordered_set和unordered_map

C++98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时的效率可达到O(logN),即最差情况下需要比较红黑树的高度次,但当树中的结点非常多时,查询效率也不理想。最好的查询是,进行很少的比较次数就能够将元素找到,因此在C++11中,STL又提供了4个unordered系列的关联式容器,这四个容器与红黑树结构的关联式容器使用方式基本类似,只是其底层结构不同。unordered_set是不按特定顺序存储键值的关联式容器,其允许通过键值快速的索引到对应的元素。

平淡中造就不平凡 1223
上一篇: RSYNC配置
下一篇: 降低TCP连接传输延时(TCP/IP超时重传)
Heron & Sense
博客等级 码龄9年 4粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值