首页 > 编程语言 >C++_数据结构-Map数据类型

C++_数据结构-Map数据类型

时间:2024-12-17 17:56:06浏览次数:7  
标签:Map cmake 函数 map -- 数据类型 C++ build 哈希

C++ 数据结构

 容器类 :
    std::vector()
	map     的内部结构是R-B-tree来实现的 map: 内部实现红黑树   有序性,红黑树自动排序
	unordered_map 在C++11的时候被引入标准库  哈希表 HashMap  散列表
	               skip-list跳表
	
#include<unordered_map>
std::unnordered_map<std::string, int> myMap;	
初始化
    列表初始化 另一个容器进行初始化  迭代器初始化
    方法: insert() erase() find() size()				   

   定义哈希函数对象
     等于函数
	 比较函数  定义hash函数以及定义比较函数--operator()
 
Map 红黑树Map				   

存储的结构以及构造函数

unordered_set就是在哈希表插入value,而这个value就是它自己的key	
 数据量  内存使用 查找速度

hashmap

 在unordered_map中存储自定义对象--确保自定义对象可以被哈希以及重载相应的比较运算符
    类中重载了==符号,就不需要指定Equal函数:
 
 类比较--
   Functor Funciton  Lambda
 1.重载操作符
   < 
 
 方法2:自定义比较函数
    bool compare()
 3.比较仿函数  Function Obj  可以被()调用
 相当于一个类对象,通常使用它的时候要求重载一个运算符 —— 括号运算符【operator()】
    bool operator()()
	重载函数调用运算符 operator() 来实现仿函数 来实现自定义比较
4.std::function<>	

原因:
  unordered_map 的构造函数
示例:
  std::unordered_map<MyClass, int, MyClassHash, MyClassEqual> _mymap;
  
      MyClassHash  是一个结构体,它重载了operator()来为Key类型生成一个哈希值,
  而  MyClassEqual 同样是一个结构体,重载了operator()来比较两个Key对象是否相等。
  unordered_map的模板参数中指定了这两个对象类型作为哈希函数和等价性函数。
  
   std::pair<const _Key,_Tp>
 <key,T>	前 2 个参数分别用于确定键值对中键和值的类型,也就是存储键值对的类型  
    默认使用 STL 标准库提供的 hash<key> 哈希函数。
       注意,默认哈希函数只适用于基本数据类型(包括 string 类型),而不适用于自定义的结构体或者类。
	默认情况下,使用 STL 标准库中提供的 equal_to<key> 规则,该规则仅支持可直接用 == 运算符做比较的数据类型   
使用:
    1.使用it->first和it->second分别访问键和值。
     从begin()到end() 迭代器遍历	   
	2. range for循环 用const auto& pair来捕获每个键值对,并使用pair.first和pair.second分别访问键和值。

map类型 
  Map容器中存储自定义类型,需要定义一个比较函数或者重载<运算符,以便Map容器可以正确比较和排序自定义类型的对象
   key_compare 

Java

    Map代表一种由多个key-value组成的集合,map集合是set集合的扩展					   
	unordered_set就是在哈希表插入value,而这个value就是它自己的key
	
		HashMap 基于hashing原理,通过put()和get()方法储存和获取对象		   
			
        TreeMap 基于红黑树的一种提供顺序访问的Map 				
			
    @override 
	public int hashCode()
	@override 
	public boolean equals()

python 字典

python内置的哈希函数,将键(key)作为参数进行转换(哈希运算+取余运算),
	得到一个唯一的地址(地址的索引),然后将值(value)
字典--关联数组
    python 3.6 之前  hash key value 
	Python 3.7 以后,有序 维护了一个根据插入顺序排序的链表

数据结构

 构建-插入元素-删除元素-查找元素
	实现
SkipList				   
     跳表最典型的应用是在 Redis 的有序集合,是通过哈希表+跳表来实现的				   
		jdk中提供的实现主要有:ConcurrentSkipListMap与ConcurrentSkipListSet		   
表:
   顺序表
   链表
   跳表:  链表 索引链表--多层索引  层级数和结点数--以空间换时间
   哈希表
树-tree        
		自平衡的二叉查找树--红黑树				
         std::map 
     抽象语法树(AST)
     文档对象模型(DOM)也是树结构 	
	 堆是一种特殊的数据结构,它是一棵完全二叉树  Heap
				   
				   
图-graph  节点(Vertex)和边(Edge
   图的存储结构主要分为两种:邻接矩阵以及邻接表	
     深度优先遍历(DFS)以及广度优先遍历(BFS)
	 最短路径算法	
     DAG: 任务调度		 
	    控制流图(Control Flow Graph,CFG)和数据依赖图(Data Dependence Graph,DDG)				   
网络: net				   					   

使用示例

vector<int > twoSum(vector<int> & num,int target)
{
 unorder_map<int,int> m;
 vector<int> temp;
 int nums_len = num.siez();
 // 转换为 hash字典
 for(int i = 0;i < nums_len;i++)
 { 
   m[num[i]] =i;
  }
 for(int i = 0;i<nums_len;i++)
  {
   if(m.count(target-num[i])) &&m[target-num[i]] !=i{
    temp.emplace_back(i);
	temp.emplace_back(m[target-num[i]]);
	return temp;
   }
  
  }	 
 return temp;
}

###代码说明 
   键在unordered_map中出现的次数。
   由于unordered_map  不允许有重复的键,所以返回值要么是0(键不存在),要么是1(键存在)‌	
				   
				   
可读性和规范性				   

Cmake

###搜索指定目录下源文件添加到变量中 
AUX_SOURCE_DIRECTORY(src DIR_SRCS)
add_executable(MyApp ${DIR_SRCS})

 ## file 命令的一种模式,GLOB 用于获取匹配指定通配符模式的文件
 file(GLOB DIR_SRCS "src/*.cpp")
 add_executable(MyApp ${DIR_SRCS})	
 
 
###其 通过file命令,我们可以进行文件的读写、复制、删除等操作,同时还可以获取文件的属性和状态信息
     file(READ filename variable):
    读取指定文件的内容,并将结果存储到变量中。	

CMaleLists.txt

 rm -rf ./build && mkdir ./build  &&  cd ./build
 cmake ..
 make

 其中   cmake ..   (to use the default build system) 或者  cmake .. -G Ninja
或者: 
     mkdir ./build  &&  cd ./build
     cmake ..
     cmake --build .	 
 不直接 make,而是使用 cmake --build 形式的命令,主要是为了跨平台,使用这种形式后,不管你是使用的什么生成器,CMake 都能正确构建
 
 ## Configuration 阶段,为不同的构建工具生成相应文件。-S 指定 CMakeLists.txt 所在目录,
 ## -B 指定输出目录,cmake 读取 CMakeLists.txt 同时收集环境及项目配置信息,写入 CMakeCache.txt 中
  cmake -S . -B build 
  cmake --build build 
 # build 阶段,使用构建工具构建默认 target
				   
-S <path> 或 --source <path>: 指定项目的源代码目录。这个路径应该是包含 CMakeLists.txt 文件的目录。

  -B 或 --build : 指定构建

模型推理

 前向传播(Forward Propagation) 将新数据输入神经网络,通过前向传播计算得到预测结果
 
 
模型训练  
    前向传播--预测结果 --> 根据预测结果和真实标签计算损失值-->损失函数
    反向传播--> 优化算法-->更新模型参数		

标签:Map,cmake,函数,map,--,数据类型,C++,build,哈希
From: https://www.cnblogs.com/ytwang/p/18613111

相关文章

  • 有关函数(c++)
    函数的分类:主函数,c++库函数,用户自定义函数一些基本的函数:从函数的作用范围可以分为:全局函数,成员函数(类的函数,后面在有关类的知识点会提到)注意:一个源代码文件中,定义的函数能否被其它文件调用。能被调用的函数在前面加extern(默认),而不能被调用的加static(不能省略)函数定义的......
  • Linux环境下安装MapReduce(以Hadoop MapReduce为例)的详细步骤
    一、前提条件操作系统准备确保你有一个合适的Linux发行版,如Ubuntu、CentOS等。以CentOS为例,系统应该是比较新的版本,并且已经完成了基本的系统更新。安装好Java运行环境(JDK),因为Hadoop是基于Java开发的。你可以通过以下命令检查Java是否安装:java-version。如果没有安装,在CentO......
  • VS code轻量级开发平台配置(C/C++版)
    写c++代码一直用VS,后来发现太麻烦了,转站vs code。按照步骤安装,问题不大。我也是跟着一个博主学习安装的,一起学习。一、VS code下载下载链接:DownloadVisualStudioCode-Mac,Linux,Windows对应选择适合自己电脑的版本,安装路径自定义时不要包含中文字符,其他的直接下一......
  • c++领域展开第四幕——类和对象(上篇收尾 this指针、c++和c语言的初步对比)超详细!!!!
    文章目录前言一、this指针二、c++和c语言的初步对比总结前言上篇我们初步学习了类的基本概念以及实例化今天我们来学习类的构造以及析构还有类的默认成员函数,类和对象这一部分都会有点难跟着我一起来吧一、this指针Date类中有Init与Print两个成员函数,函......
  • 【华为OD-E卷-寻找链表的中间结点 100分(python、java、c++、js、c)】
    【华为OD-E卷-寻找链表的中间结点100分(python、java、c++、js、c)】题目给定一个单链表L,请编写程序输出L中间结点保存的数据。如果有两个中间结点,则输出第二个中间结点保存的数据。例如:给定L为1→7→5,则输出应该为7;给定L为1→2→3→4,则输出应该为3;输入描述......
  • 【华为OD-E卷-字符串重新排序 字符串重新排列 100分(python、java、c++、js、c)】
    【华为OD-E卷-字符串重新排序字符串重新排列100分(python、java、c++、js、c)】题目给定一个字符串s,s包括以空格分隔的若干个单词,请对s进行如下处理后输出:1、单词内部调整:对每个单词字母重新按字典序排序2、单词间顺序调整:1)统计每个单词出现的次数,并按次数降序排列2)次......
  • # 从零开始 - DTO 框架 “MapStruct“ 快速上手
    从零开始DTO框架“MapStruct”快速上手简介是什么?​​      MapStruct,对象映射框架,主要用于DTO和实体类之间的转换。通过什么方式?使用注解生成映射代码。在编译时生成高性能的纯Java映射代码,无需运行时反射,性能高。区别反射:​     ......
  • C++特性
    1.自动匹配类型(auto)和decltype(查询类型)auto_a=6;std::cout<<typeid(decltype(_a)).name()<<std:send1;步骤拆分:1.auto根据初始化的数值6,自动推导类型为int2.decltype根据a推导出类型为int结果:int2.范围for//范围for使用std::vector<int>vector;for(auto......
  • 在CodeBolcks+Windows API下的C++面向对象的编程教程——给你的项目中添加图标
    0.前言我想通过编写一个完整的游戏程序方式引导读者体验程序设计的全过程。我将采用多种方式编写具有相同效果的应用程序,并通过不同方式形成的代码和实现方法的对比来理解程序开发更深层的知识。了解我编写教程的思路,请参阅体现我最初想法的那篇文章中的“1.编程计划”:学习编程......
  • 分布式批处理引擎Mapreduce
    一、MapReduce概述定义MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行计算。它是一种分布式计算框架,主要用于在集群环境下对海量数据进行批处理。这个框架将计算任务抽象为两个主要阶段:Map阶段和Reduce阶段。由Google公司在2004年提出,主要用于解决大规模数据处理的......