二叉树映射map

#include<iostream>
#include<map>  //映射(也叫字典),二叉树映射,不是哈希映射
using namespace std;
int main()
{cout << "二叉树(红黑树)" << endl;map<string, int> m;m["bill"]= 67;m["toney"] = 98;m["Mary"] = 100;cout << m["Mary"] << endl;system("pause");return 0;
}

数组优点

#include<iostream>
#include<string>
using namespace std;
int main()
{//数组的优点//对下标(索引)进行非常快的地址运算//取arr[0]  arr[23232]  速度一样int arr[100000];int length = sizeof(arr) / sizeof(int);cout << length << endl;for (int i = 0; i < length; i++){arr[i] = i%100;}cout << arr[8] << endl;cout << arr[18] << endl;cout << arr[98756] << endl;system("pause");return 0;
}

线性映射

LinearMap.h

#ifndef LINEARMAP_H
#define LINEARMAP_H
#include<vector>
template<class Key,class Value>
class LinearMap  //线性映射-没用的东西
{
public:LinearMap(int size = 101) :arr(size){currentSize = 0;}void Put(const Key &k, const Value &v){arr[currentSize] = DataEntry(k, v);++currentSize;}Value Get(const Key & k){//线性查找for (size_t i = 0; i < currentSize; ++i){if (arr[i].key == k){return arr[i].value;}}return Value();}
private:struct DataEntry {Key key;Value value;DataEntry(const Key & k = Key(),const Value & v = Value()) : key(k), value(v) {}};std::vector<DataEntry> arr;int currentSize;
};#endif

linearMap.cpp

#include<iostream>
#include<string>
#include"LinearMap.h"
using namespace std;
int main()
{//没用的,仅学习的线性映射LinearMap<string, int> lm;lm.Put("bill", 99);lm.Put("Tom", 88);cout << "Lin  earMap:" << lm.Get("Tom") << endl;system("pause");return 0;
}

运行结果:

哈希映射

HashMap.h

#ifndef LINEARMAP_H
#define LINEARMAP_H
#include<vector>
template<class Key, class Value>
class HashMap  //哈希映射 最快
{
public:HashMap(int size = 101) :arr(size){currentSize = 0;}void Put(const Key &k, const Value &v){int pos = myHash(k);arr[pos] = DataEntry(k, v);++currentSize;}Value Get(const Key & k){int pos = myHash(k);if (arr[pos].key == k)return arr[pos].value;elsereturn Value();}unsigned hash(const Key & k) const{unsigned int hashVal = 0;const char* keyp = reinterpret_cast<const char*>(&k);  //转型for (size_t i = 0; i < sizeof(Key); i++){hashVal = 37 * hashVal + keyp[i];}return hashVal;}int myHash(const Key & k) const{unsigned hashVal = hash(k);hashVal %= arr.size();return hashVal;}private:struct DataEntry {Key key;Value value;DataEntry(const Key & k = Key(),const Value & v = Value()) : key(k), value(v) {}};std::vector<DataEntry> arr;int currentSize;
};#endif

HashMap.cpp

#include<iostream>
#include<string>
#include"HashMap.h"
using namespace std;
int main()
{HashMap<string, int> hm;/*cout << hm.hash("Bill") << endl;cout << hm.myHash("Bill") << endl;*/hm.Put("Bill", 33);hm.Put("Tom", 98);cout << hm.Get("Bill") << endl;//cout << hm.Get("Tom") << endl;  取两个就会错误system("pause");return 0;
}

运行结果:

c++自带的哈希映射(STL)

#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS
#include<iostream>
#include<string>
#include<hash_map>
using namespace std;
//使用C++封装好的hash_map
//又要排序又要映射时就用tree_map(二叉树映射)
int main()
{hash_map<string, int> hm;hm["Bill"] = 12;hm["Tom"] = 22;hm["Mary"] = 34;cout << hm["Mary"] << endl;cout << hm["Tom"] << endl;system("pause");return 0;
} 

运行结果:

数据结构-哈希与映射相关推荐

  1. Python中常用的数据结构---哈希表(字典)

    Python中常用的数据结构-哈希表(字典) 常用的数据结构有数组.链表(一对一).栈和队列.哈希表.树(一对多).图(多对多)等结构. 在本目录下我们将讲解,通过python语言实现常用的数据结构. ...

  2. 浅谈算法和数据结构: 哈希表

    作者: yangecnu(yangecnu's Blog on 博客园) 出处:http://www.cnblogs.com/yangecnu/  http://www.cnblogs.com/yan ...

  3. 数据结构——哈希表的详解与实现

    数据结构--哈希表(HashTable) 1.前言 ​ 当我们频繁的查找数据中的某个元素时,我们通常会选择数组来存放数据,因为数组的的内存是连续的,可以直接通过下标访问数据,但是它添加和删除数据比较麻 ...

  4. 算法笔记(三)特殊数据结构——哈希表、有序表、并查集、KMP、Manacher、单调栈、位图、大数据类题

    layout: post title: 算法笔记(三)特殊数据结构--哈希表.有序表.并查集.KMP.Manacher.单调栈.位图.大数据类题 description: 算法笔记(三)特殊数据结构- ...

  5. java hashtable 数据结构_数据结构--哈希表(Java)

    数据结构--哈希表(Java) 介绍 哈希表 底层是 数组加链表 或者是 数组加二叉树 ,一个数组里面有多个链表,通过散列函数来提高效率 代码 package cn.guizimo.hashtab; ...

  6. 数据结构哈希表的实现与设计

    数据结构哈希表查找姓名的课程设计 有没有大神能帮忙写一下这道题,课设的题目.用C++语言 问题描述:针对某公司中花名设计哈希表,并完成相应的建表和查表程序,基本要求: (1)假设花名为汉字拼音形式.名 ...

  7. 数据结构 — 哈希表

    目录 文章目录 目录 哈希表 哈希表 哈希表,又称为散列表,是根据键值对(Key/Value)进行访问的数据结构,它让 Value 经过哈希函数的转换映射到哈希表对应的位置上,查找效率非常高.哈希索引 ...

  8. 数据结构-----------------------哈希表(最通俗易懂的文章)

    哈希表 简要 通俗来讲,哈希表是通过函数 (映射关系) 来直接寻找表中存储的关键字,哈希表也是一种数据结构,它是表结构的一种升级拓展,哈希就是一种函数映射,表是一种数据结构,那么合起来就叫哈希表 那么 ...

  9. 常见数据结构-哈希算法

    一,什么是哈希算法 哈希和散列其实意思是一样的,只是中文翻译的区别,英文是 Hash. 哈希算法也叫 hash 算法或散列算法.哈希算法的定义:将任意长度的二进制串映射为固定长度(一般是 128 bi ...

最新文章

  1. 拼多多一度跌破发行价:已遭上海工商约谈 被要求自查自纠
  2. 从该函数中确定函数名称(不使用回溯)
  3. springmvc十七:自定义视图和自定义视图解析器
  4. 相位噪声 matlab,相位噪声仿真方法.PDF
  5. TypeError: object of type 'zip' has no len()、'zip' object is not subscriptable
  6. 聚合多个文件_python数据分析与挖掘(二十五)--- Pandas高级处理分组与聚合
  7. pcl里面的点特征直方图(PFH)
  8. php中购物车功能,php如何实现购物车功能
  9. IntelliJ IDEA 开发swing(一)
  10. 2022Matlab小白入门详细教程
  11. ZOOM视频会议共享声音,Zoom共享屏幕播放视频卡顿,你学会了吗?
  12. 优化问题 - 内点法
  13. 2014.12 总结
  14. 爆破神器 Hydra 的使用
  15. 经纬度查地址与地址查经纬度
  16. 华为云空间联系人是不是机主_联系人丢失找回—华为云空间数据安全功能关键时刻出绝招...
  17. PL2303在ARM Linux下驱动的问题及解决方法
  18. 8421码、5421码、2421码、余三码
  19. 12306登录python_python爬虫 -- 12306登录刷票
  20. 华为odjava机试题_华为OD机试 :找终点

热门文章

  1. linux查看正在运行的窗口,获取linux中打开的应用程序窗口的数量
  2. php多表递归查询,使用公用表表达式的递归查询
  3. 从numpy里加载_PyTorch强化:01.PyTorch 数据加载和处理
  4. faiss python安装_faiss入门
  5. 多媒体计算机技术的主要特点,多媒体技术主要特点?
  6. linux ssh服务,Linux配置SSH服务以便实现远程连接
  7. 台式计算机性能清单是强制的吗,教你识别良心商家和奸商电脑配置清单区别以及如何选购台式电脑机箱...
  8. mysql gt resource_实用干货,MYSQL这么用就对啦
  9. java service 事物_Service 事务(JdbcUtils 升级)
  10. ais文件还原到mysql_SQLSERVER 数据库可疑的解决步骤