【1++的数据结构】之map与set(一)

这篇具有很好参考价值的文章主要介绍了【1++的数据结构】之map与set(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

👍作者主页:进击的1++
🤩 专栏链接:【1++的数据结构】


一,关联式容器与键值对

像list vector dequeue等这样的容器我们称为序列式容器,原因是由于其底层是线性的数据结构,存储的是元素本身。关联式容器与序列式容器的区别在于:关联式容器中存储的是键值对,其数据检索时效率更高。


那么什么是键值对呢?
用来表示具有一 一对应关系的一种结构,该结构中一般只包含两个成员变量key和value,key代
表键值,value表示与key对应的信息。

STL总共实现了两种不同结构的管理式容器:树型结构与哈希结构。树型结构的关联式容器主要有四种:map、set、multimap、multiset。这四种容器的共同点是:使用平衡搜索树(即红黑树)作为其底层结果,容器中的元素是一个有序的序列。

二,set

set中只放value,但在底层实际存放的是由<value, value>构成的键值对。在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定排序准则进行排序。set在底层是用二叉搜索树(红黑树)实现的

set的使用


构造

【1++的数据结构】之map与set(一),1++的数据结构,数据结构,c++,map,set

void Test1()
{
	set<int> s1;
	int arr[] = { 2,1,4,7,3,8 };
	set<int> s2(arr, arr + sizeof(arr) / sizeof(arr[0]));
	set<int> s3(s2);
	for (auto x : s2)
	{
		cout << x << " " ;
	}
	cout << endl;
	for (auto x : s3)
	{
		cout << x << " ";
	}
	cout << endl;

}

【1++的数据结构】之map与set(一),1++的数据结构,数据结构,c++,map,set


插入

【1++的数据结构】之map与set(一),1++的数据结构,数据结构,c++,map,set
【1++的数据结构】之map与set(一),1++的数据结构,数据结构,c++,map,set

int arr[] = { 2,1,4,7,3,8 };
	set<int> s2(arr, arr + sizeof(arr) / sizeof(arr[0]));
	for (auto x : s2)
	{
		cout << x << " ";
	}
	cout << endl;
	std::pair<set<int>::iterator,bool> p1=s2.insert(5);
	cout << "p1 first:" << *p1.first << " p1.second:" << p1.second;
	std::pair<set<int>::iterator, bool> p2 = s2.insert(4);
	cout << endl;
	cout << "p2 first:" << *p2.first << " p2.second:" << p2.second;
	cout << endl;
	for (auto x : s2)
	{
		cout << x << " ";
	}
	cout << endl;

【1++的数据结构】之map与set(一),1++的数据结构,数据结构,c++,map,set
对于返回值pair,当插入的元素set中没有时,则进行插入,并且pair中的first_value中存储插入元素的位置,second_value存储true; 当插入的元素已经存在时,first_value中存储已经存在元素的位置,second_value存储false。


删除

【1++的数据结构】之map与set(一),1++的数据结构,数据结构,c++,map,set

int arr[] = { 2,1,4,7,3,8 };
	set<int> s1(arr, arr + sizeof(arr) / sizeof(arr[0]));
	for (auto x : s1)
	{
		cout << x << " ";
	}
	cout << endl;

	int ret1 = s1.erase(4);
	int ret2 = s1.erase(10);
	s1.erase(s1.begin());
	for (auto x : s1)
	{
		cout << x << " ";
	}
	cout << endl;
	cout << ret1 << endl;
	cout << ret2 << endl;

【1++的数据结构】之map与set(一),1++的数据结构,数据结构,c++,map,set
在第二种按元素删除的方式中,其返回值为返回被删除元素的个数。

三,map

map是关联容器,它按照特定的次序(按照key来比较)存储由键值key和值value组合而成的元素。
在map中,键值key通常用于排序和惟一地标识元素,而值value中存储与此键值key关联的内容。键值key和值value的类型可能不同,并且在map的内部,key与value通过成员类型value_type绑定在一起,为其取别名称为pair。

map的使用

构造


【1++的数据结构】之map与set(一),1++的数据结构,数据结构,c++,map,set

map<int,char> m1;
	m1[1] = 'a';
	m1[2] = 'b';
	m1[3] = 'c';
	m1[4] = 'd';
	map<int, char> m2(m1.begin(), m1.end());
	for (auto x : m2)
	{
		cout << x.first << x.second<<" ";
	}
	cout << endl;

【1++的数据结构】之map与set(一),1++的数据结构,数据结构,c++,map,set
在上述中,我们提到了operator[ ],下面我们对这个操作进行讲解。

【1++的数据结构】之map与set(一),1++的数据结构,数据结构,c++,map,set
此操作具有查找,修改,插入,三种功能。
当map中有key时,则其返回key对应的value的引用,就可以进行对value的修改了。
当map中没有key时,则在map中插入 一个新的键值对,返回value的引用。

插入


【1++的数据结构】之map与set(一),1++的数据结构,数据结构,c++,map,set

m2.insert(pair<int, char>(5, 'e'));
	m2.insert(make_pair(6, 'f'));
	for (auto x : m2)
	{
		cout << x.first << x.second << " ";
	}
	cout << endl;

【1++的数据结构】之map与set(一),1++的数据结构,数据结构,c++,map,set

删除


【1++的数据结构】之map与set(一),1++的数据结构,数据结构,c++,map,set
map的删除与set相似,这里就不过多进行讲解。

四,multiset与multimap

multiset与set的区别是,multiset中的元素可以重复,set是中value是唯一的。


multimap和map的唯一不同就是:map中的key是唯一的,而multimap中key是可以重复的。
multimap中的接口可以参考map,功能都是类似的。
multimap中没有重载operator[]。文章来源地址https://www.toymoban.com/news/detail-668375.html

到了这里,关于【1++的数据结构】之map与set(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Map、Set和哈希表(数据结构系列14)

    目录 前言: 1.搜索树 1.1概念 1.2插入 1.3查找 1.4删除 1.5二叉搜索树整体代码展示  2. Map和Set的讲解 2.1 Map的说明 2.1.1Map的方法 2.2 Set 的说明 2.2.1Set的方法 3.哈希表 3.1哈希表的概念 3.2哈希冲突 3.3冲突的避免 3.4哈希冲突的解决 3.4.1闭散列 3.4.2开散列 结束语: 这节中小编主要与

    2024年02月07日
    浏览(36)
  • 数据结构,Map和Set的使用方法

    在数据结构中我们经常会使用到 Map 和 Set ,Map 和 Set 到底是什么,它怎样去使用呢?因此博主整理出 Map 和 Set 这两个接口的介绍与使用方法。 目录 1. 啥是Map和Set? 1.1 Map和Set的模型 2. Map的使用 2.1Map的说明 2.2 Java中Map常用的方法 3. Set的使用 3.1Java中Set的常用方法  Map 和 Set

    2023年04月26日
    浏览(39)
  • 【1++的数据结构】之map与set(一)

    👍作者主页:进击的1++ 🤩 专栏链接:【1++的数据结构】 像list vector dequeue等这样的容器我们称为序列式容器,原因是由于其底层是线性的数据结构,存储的是元素本身。 关联式容器 与序列式容器的区别在于:关联式容器中存储的是键值对,其数据检索时效率更高。 那么什

    2024年02月11日
    浏览(43)
  • 数据结构 - 7(Map和Set 15000字详解)

    二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值 它的左右子树也分别为二叉搜索树 int[] array ={5,3,4,1,7,8,2,6,0

    2024年02月06日
    浏览(37)
  • 【数据结构】 | java中 map和set 详解

    🎗️ 博客新人,希望大家一起加油进步 🎗️ 乾坤未定,你我皆黑马 我们首先来看一下集合的框架结构: Set实现了Collection接口,Map是一个单独存在的接口。 而下面又分别各有两个类,分别是TreeSet(HashSet)和 HashSet(HashMap) Map和Set的作用是用来查找和搜索的;以后涉及到

    2023年04月10日
    浏览(36)
  • Map,List,Set 等集合以及底层数据结构

    集合类存放于java.util包中。集合类存放的都是对象的引用,而非对象本身。常见的集合主要有三种——Set(集)、List(列表)和Map(映射)。其中,List和Set 都 实现 了 Collection 接口,并且List和Set也是接口,而 Map 为独立接口 。常见的实现类如下: List 的实现类有:ArrayList、

    2024年02月09日
    浏览(45)
  • 【数据结构】二叉搜索树与Map和Set

    目录 ♫二叉搜索树 ♪什么是二叉搜索树 ♪二叉搜索树的特性 ♪模拟实现二叉搜索树 ♫Map ♪什么是Map ♪Map的内部类 ♪Map的常用方法 ♪Map的遍历 ♫Set  ♪什么是Set ♪Set的常用方法 ♪Set的遍历 ♪什么是二叉搜索树 二叉搜索树又称二叉排序树,是一种特殊的二叉树,这颗树

    2024年02月07日
    浏览(40)
  • 数据结构之Map/Set讲解+硬核源码剖析

     💕\\\"活着是为了活着本身而活着\\\"💕 作者:Mylvzi    文章主要内容:数据结构之Map/Set讲解+硬核源码剖析    二叉搜索树又叫二叉排序树,他或者是一颗空树,或者是具有以下性质的树 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 若它的右子树不为空,

    2024年02月04日
    浏览(50)
  • 【C++】数据结构的恶龙set和map来了~

    下一篇AVL树难点中的难点~   文章目录 前言 一、set的介绍 二、map的介绍        题目练习 总结   1.关联式容器 在初阶阶段,我们已经接触过STL中的部分容器,比如:vector、list、deque、 forward_list(C++11)等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面

    2024年02月05日
    浏览(37)
  • ES6中新增的Set/Map两种数据结构

    Set是一种叫做集合的数据结构,Map是一种叫做字典的数据结构🧀🧀🧀 什么是集合?什么又是字典? 集合 是由一堆无序的、相关联的、且不重复的内存结构【数学中称之为元素】组成的组合 字典 是一些元素的集合。每个元素有一个称作key的域,不同元素的key各不相同 区别

    2024年02月07日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包