C++STL中的map

这篇博客介绍了C++的STL,特别是关注于map容器。STL包含容器、迭代器、算法、仿函数、迭代适配器和空间配制器等组件。map是一种关联容器,基于红黑树实现,用于存储键值对,提供快速查找。在使用map时,需要注意自定义键值类型的比较操作符重载,以确保正确排序。内容涵盖了map的基本数据结构和其他数据结构的使用。
摘要由CSDN通过智能技术生成

参考博客:C++之STL总结精华笔记

一、STL介绍

STL(StandardTemplate Library),即标准模板库。

二、STL的六大组件

  1. 容器(Container)
    c++中有两种类型的容器:顺序容器和关联容器。顺序容器主要有:vector、list、deque等。其中vector表示一段连续的内存地址,基于数组的实现,list表示非连续的内存,基于链表实现。deque与vector类似,但是对于首元素提供删除和插入的双向支持。关联容器主要有map和set。map是key-value形式的,set是单值。map和set只能存放唯一的key值,multimap和multiset可以存放多个相同的key值。
  2. 迭代器(Iterator)
    提供了访问容器中对象的方法。例如,可以使用一对迭代器指定list或vector中的一定范围的对象。迭代器就如同一个指针。事实上,C++的指针也是一种迭代器。但是,迭代器也可以是那些定义了operator*()以及其他类似于指针的操作符地方法的类对象;
  3. 算法(Algorithm)
    是用来操作容器中的数据的模板函数。例如,STL用sort()来对一个vector中的数据进行排序,用find()来搜索一个list中的对象,函数本身与他们操作的数据的结构和类型无关,因此他们可以在从简单数组到高度复杂容器的任何数据结构上使用;
  4. 仿函数(Function object)
    仿函数(functor)又称之为函数对象(functionobject),其实就是重载了()操作符的struct,没有什么特别的地方
  5. 迭代适配器(Adaptor)
  6. 空间配制器(allocator)
    其中主要工作包括两部分:对象的创建与销毁map是用来存放<key, value>键值对的数据结构,可以很方便快速的根据key查到相应的value;内存的获取与释放

三、map的使用

c++map容器提供一个键值对(key/value)容器,map与multimap差别仅仅在于multimap允许一个键对应多个值。需要包含头文件#include。对于迭代器来说,可以修改实值,而不能修改key。map会根据key自动排序。

基本数据结构

    //1.定义和初始化
    map<int,string> map1;                  //空map
   
    //2.常用操作方法
    map1[3] = "Saniya";                    //数组的方式添加元素
    map1.insert(map<int,string>::value_type(2,"Diyabi"));//插入元素
    //map1.insert(pair<int,string>(1,"Siqinsini"));
    map1.insert(make_pair<int,string>(4,"V5"));
    string str = map1[3];                  //根据key取得value,key不能修改
    map<int,string>::iterator iter_map = map1.begin();//取得迭代器首地址
    int key = iter_map->first;             //取得key
    string value = iter_map->second;       //取得value
    map1.erase(iter_map);                  //删除迭代器数据
    map1.erase(3);                         //根据key删除value
    map1.size();                       //元素个数
    map1.empty();                       //判断空
    map1.clear();                      //清空所有元素
 
    //3.遍历
    for(map<int,string>::iterator iter = map1.begin();iter!=map1.end();iter++)
    {
       int keyk = iter->first;
       string valuev = iter->second;
    }

其他数据结构

Map提供一对一的数据处理能力(第一个为关键字,每个关键字只能在map中出现一次,第二个为该关键字的值),由于这个特性,在处理一对一数据的时候,map在编程上可以提供快速通道。map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的。当需要使用自定义的数据结构作为键值时,编译器无法进行比较,找不到类似的模板,所以报错。因此需要重载比较操作符‘<’

struct ShortURLInfo
{
	char URL[MAX_SHORT_URL_LEN + 1];   //URL
	int  GenerateTime;                  //URL生成时间(单位s)
	bool operator < (const ShortURLInfo& ti) const {
		return GenerateTime < ti.GenerateTime;
	}
	ShortURLInfo() { GenerateTime = -1; }
};

struct URLInfo
{
	char URL[MAX_LONG_URL_LEN + 1];   //URL
	int  expireTime;                  //URL保留有效时长(单位s)
};

std::map<ShortURLInfo, URLInfo> MapOfURL;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值