map和set的使用和原理

本文介绍了C++中的关联容器map和set,它们以关键字进行保存和访问,底层实现为红黑树。map用于存储键值对,set则只存储键。由于红黑树的特性,它们在插入时自动排序并去除重复值。文章通过实例展示了如何统计水果出现次数,以及如何使用set过滤特定元素,并探讨了如何自定义排序规则。
摘要由CSDN通过智能技术生成

我们学习过顺序容器如vecor,list等,它们中的元素是按照在容器中的位置来顺序保存和访问的。而接下来要学习的关联容器则有根本的不同,它们中的元素是按关键字来保存和访问的。
在《C++Primer》中列举了标准库中的8个关联容器,如下:

这里写图片描述

关联容器支持高效的关键字查找和访问,我们在这里介绍两个主要的关联容器set和map。

map

map里面存的是一些key-value对,其中key起到索引的作用, 而value则表示于索引相关联的数据。
比如字典就是一个很好使用map的例子,把单词当作key,解释当作value。其实map类型也常称做关联数组,它和一般的数组类似,可以认为它key就是数组的下标(只不过不必是整数),value则是数组存的值,还是上面的字典例子,比如有某个单词为right,它的其中一个解释为右边的,我们就可以使用类似数组的方式a[“right”]访问到“右边的”这个解释。

set

set里面每个元素只存有一个key,它支持高效的关键字查询操作,比如检查一个关键字是否在set中或者在
某些文本处理过程中可用set保存想要忽略的单词



在学习这两种关联容器之前,我们可以先看一两个如何使用这类容器的例子。

假设一个字符串数组,里面的每个字符串都是水果,比如苹果,梨子等,现在要统计每种水果出现的次数。

string fruit[] =
{
    "apple", "pear", "watermelon", "peach", "banana",
    "apple", "pear", "watermelon", "peach",
    "apple", "pear", "watermelon",
    "apple", "pear",
    "apple",
};

size_t n = sizeof(fruit) / sizeof(
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值