左程云算法笔记025

2023-10-26

// map和哈希map的使用.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

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

void Print(unordered_map<string,string>&Map)
{
	for (const auto& w : Map)
	{
		cout << "key值=" << w.first << "  value值=" << w.second << endl;
	}
}


class Node
{
public:
	Node(int v,string N):value(v),name(N){}

	string name;
	int value;
	
	bool operator==(const Node& p)const
	{
		return name == p.name && value == p.value;
	}


};


	size_t Nodehash(const Node& p)
	{
		return hash<string>()(p.name) ^ hash<int>()(p.value);
	}

	int main()
	{

		unordered_map<string, string>Map;
		Map.insert(pair<string, string>("xiaojien", "萧吉恩"));
		cout << Map.count("xiaojien") << endl;;
		cout << Map.count("x") << endl;;
		cout << Map["xiaojien"] << endl;
		Print(Map);
		cout << "---------------------------------" << endl;
		java的hashmap可以用put修改键值
		//Map.insert(pair<string, string>("xiaojien", "他是萧吉恩"));
		//cout << Map["xiaojien"] << endl;

		//Map.erase("xiaojien");
		at操作抛出异常
		Map.at("xiaojien");
		//cout<<"是空的" <<Map["xiaojien"]<< endl;
		cout << "-------------------------------------------------" << endl;

		string test1 = "xiaojien";
		string test2 = "xiaojien";
		cout << Map[test1] << endl;
		cout << Map[test2] << endl;


		unordered_map<int, string>Map2;
		Map2.insert(pair<int, string>(1234567, "我是1234567"));

		int a = 1234567;
		int b = 1234567;

		cout << (&a == &b) << endl;

		cout << Map2[a] << endl;
		cout << Map2[b] << endl;
		cout << "上面的代码在任何的语言中都是差不多的,哈希都是按值传递,哈希表的时间复杂度是O(1)级别" << endl;

		cout << "下面是非原生类型的对比,需要自定义对比运算符" << endl;


		unordered_map<Node, string, function<size_t(const Node& p)>>Map3(123,Nodehash);
		Node node1(1,"123");
		Node node2(2, "123");
		Map3.insert(pair<Node,string>(node1,"我进来了"));
		cout << Map3[node1] << endl;
		cout << Map3[node2] << endl;

		cout << "下面是有序表===========================" << endl;
		map<int, string>Map11;
		Map11.insert(pair<int, string>(3, "我是3"));
		Map11.insert(pair<int, string>(0, "我是3"));
		Map11.insert(pair<int, string>(7, "我是3"));
		Map11.insert(pair<int, string>(2, "我是3"));
		Map11.insert(pair<int, string>(5, "我是3"));
		Map11.insert(pair<int, string>(9, "我是3"));

		cout << Map11[3] << endl;
		//java的treeMap可以修改值,map不行
		Map11.insert(pair<int, string>(3, "我是4"));
		cout << Map11[3] << endl;

		auto x = Map11.begin();
		cout << x->first << endl;
		
		cout << "c++map 没有java的treemap强,没有lastkey,floorkey,类似的操作" << endl;
		cout << "map时间复杂度是log(n)级别," << endl;
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

左程云算法笔记025 的相关文章

随机推荐

  • datetime.time类介绍

    一 time是一个时间类 由时 分 秒 微妙组成 其构造函数如下 class datetime time hour minute second microsecond tzinfo 参数tzinfo 它表示时区信息 各参数的取值范围 hou
  • window安装docker Desktop和wsl2

    目录 一 先到微软商店下载terminal 也就是power shell 后续命令都在这个里面执行 二 安装docker Destop 1 打开控制面板 2 勾选Hyper V服务 3 根据提示重启电脑 等待更新即可 二 启动Docker
  • 字符串去重的5种方式

    public class Demo public static void main String args String str albcad12l gt sfg gt String newStr quChong5 str System o
  • 深度负反馈

    负反馈放大电路的方块图 因为负反馈放大电路有四种组态 而且对于同一种组态 具体电路也各不相同 所以为了研究负反馈放大电路的共同规律 可以利用方块图来描述所有电路 一 负反馈放大电路的方块图表示法 任何负反馈放大电路都可以用下图所示的方块图来
  • windows服务器禁用135,137,138,139,445端口方法

    windows服务器禁用135 137 138 139 445端口方法 1 防火墙新建入站和出站规则 注意 此方法只针对防火墙已开启的情况下才能实现禁用端口 打开控制面板 系统和安全 Windows Defender 防火墙 在左侧选择 高
  • 安装Apache Hive-2.3.3

    1 Hive是什么 1 1 Hive是数据仓库 数据仓库英文名DataWarehouse 可简写为DW或DWH 数据仓库 由数据仓库之父比尔 恩门 Bill Inmon 于1990年提出 主要功能仍是将组织透过资讯系统之联机事务处理 OLT
  • 【H.264/AVC视频编解码技术详解】十七:帧内预测编码的预测实现方法

    H 264 AVC视频编解码技术详解 视频教程已经在 CSDN学院 上线 视频中详述了H 264的背景 标准协议和实现 并通过一个实战工程的形式对H 264的标准进行解析和实现 欢迎观看 纸上得来终觉浅 绝知此事要躬行 只有自己按照标准文档
  • pandas.read_csv参数整理

    pandas read csv参数整理 转载 读取CSV 逗号分割 文件到DataFrame 也支持文件的部分导入和选择迭代 更多帮助参见 http pandas pydata org pandas docs stable io html
  • 如何当个优秀的文档工程师?从 TC China 看技术文档工程师的自我修养

    本文系 NebulaGraph Community Academic 技术文档工程师 Abby 的参会观感 讲述了她在中国技术传播大会分享的收获以及感悟 据说 技术内容领域 传播领域的专家和决策者们会在中国技术传播大会 tcworld Ch
  • 实施静态分析并非易事

    针对软件错误和漏洞的静态分析测试 SAST 应该成为应用程序安全性和软件质量程序的一部分 您需要做的就是运行一个工具 它将在开发的早期发现价格便宜且易于修复的错误 听起来很简单 但是 这不仅需要购买工具并运行扫描 还需要将代码上传到测试服务
  • 【云原生】Docker镜像、容器、仓库、配置等常见问题汇总(面试必看)

    Docker 常见问题整理汇总 本文目录 一 镜像相关 二 容器相关 三 仓库相关 四 配置相关 五 Docker与虚拟化 六 其它常见问题 一 镜像相关 1 如何批量清理临时镜像文件 可以使用sudo docker rmi sudo do
  • C++入门基础07:函数定义与声明、函数传参(传值、传地址、传引用)、函数重载

    C 入门基础07 函数定义与声明 函数传参 传值 传地址 传引用 函数重载 1 函数定义与声明 函数是一起执行一个任务的一组语句 每个程序 C C 都有一个主函数 main 所有简单的程序都可以定义其他额外的函数 可以把代码划分到不同的函数
  • 上位机发送FINS UDP命令读写欧姆龙PLC数据

    上位机通过发送FINS UDP命令读写欧姆龙PLC内部数据 可以用于上位机socket通讯测试 客户服务中心 打开 Sockettool软件 新建一个UDP客户端 HTcP TIP urIEl调试工具W 创 H隊 是出 H TCP H TC
  • 服务器物理内存总是九十几,服务器物理内存使用率90以上

    服务器物理内存使用率90以上 内容精选 换一换 开启弹性云服务器的虚拟内存后 会导致硬盘I O性能下降 因此 平台提供的Windows弹性云服务器默认未配置虚拟内存 如果弹性云服务器内存不足 建议通过 变更规格 操作来扩大内存 如果业务需要
  • 时空编解码器残差多图卷积网络预测OD客流需求

    paper title Predicting origin destination ride sourcing demand with a spatio temporal encoder decoder residual multi gra
  • windows下调用系统API实现进程创建和文件读写

    题目要求 有一个文本文件CommandList txt 第一行是说明文字 本文件最后一次打开和运行日期是20150407 第二行开始每行是一个可执行程序的名称 含路径 编写一个应用程序能打开该文件 并顺序执行其中的每个程序 并更新文件第一行
  • stm32+hx711+称重传感器

    本项目使用主控stm32f103c8t6 最小系统核心板 称重模块hx711 串口打印到电脑端显示数值 这个传感器内部是一组半桥应变片 使用方法可以有以下三种 1 使用一只传感器配合外接电阻组成全桥测量 量程为一个传感器的量程 50kg 对
  • Python 工匠:编写条件分支代码的技巧

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由鹅厂优文发表于云 社区专栏 作者 朱雷 腾讯IEG高级工程师 Python 工匠 是什么 我一直觉得编程某种意义是一门 手艺 因为优雅而高效的代码 就如同完美的手工艺品一样让人
  • 2017年总结和2018年规划(几年前帖子,私密变公开后时间就变了)

    2017年浑浑噩噩 一直处于摇摆不定的局面 2018年重新找了个工作 必须要努力啦 月薪16000 图形还是要和师兄这边搞搞UE4 图像这边学学计算机视觉 希望能通过试用期 加油
  • 左程云算法笔记025

    map和哈希map的使用 cpp 此文件包含 main 函数 程序执行将在此处开始并结束 include