vlib映射 - C语言通用映射模块

vlib - map映射

map源代码仓库链接

基本概念

map映射与set集合很类似,是逻辑上离散的容器,与set不同的是,set的数据存储方式是以index-data的形式存在,而map映射则是以key-value键值对的形式存在,set的index是整型data可以是任意型,而map的key可以任意型value可以是任意型。
vlib的map容器,在底层实现上采用了“红黑树”,与set一致,增删操作的效率高,而且也支持随机访问。同样作为链式结构,map也支持迭代器。

例子

int main()
{
	map_t m = map(str, int); // 定义并构造键类型为字符和值类型为int的映射
	map_it_t it = NULL; // 定义映射迭代器
	int data = 0;

	// 插入键值对
	data = 170; map_insert(m, "ZhangSan", &data);
	data = 174; map_insert(m, "LiSi", &data);
	data = 168; map_insert(m, "WangWu", &data);
	data = 180; map_insert(m, "ZhaoLiu", &data);

	printf("ZhangSan heigth: %d\r\n", map_at(m, int, "ZhangSan")); // 随机访问
	printf("WangWu heigth: %d\r\n", map_at(m, int, "WangWu")); // 随机访问
	printf("SunQi heigth: %d\r\n", map_at(m, int, "SunQi")); // 访问不存在的键,将输入不正确的值

	// 移除键值对
	map_erase(m, "WangWu");

	it = map_it(m); // 构造迭代器
	// 开始迭代遍历,发现"WangWu"的数据已不存在
	while (!map_it_pause(it)) 
	{
		printf("value = %d\r\n", map_it_next(it, int));
	}

	// 使用完进行删除
	_map(m);
	_map_it(it);

	system("pause");
	return 0;
}

结果:

ZhangSan heigth: 170
WangWu heigth: 168
SunQi heigth: -842150451
value = 174
value = 170
value = 180

特点

  • map定义为map_t类型
  • map构造需确定键和值的类型,键默认支持char、int、str(char*字符串)类型(可拓展),值可以任意类型
  • map可以很方便高效地插入键值对,键插入过程去重,离散的存在
  • map具备随机访问的操作,此随机访问按照红黑树二叉查找,可以高效率的随机访问
  • map隐藏了映射的结点
  • map提供了许多内置的操作方法,如增删改查等
  • map提供了专有的迭代器,方便高效的进行遍历及其他操作

常用方法

#define map(key_type, value_type) // 构造
#define _map(map) // 删除
#define map_at(map, type, key) // 随机访问
#define map_insert(map, key, value) // 插入
#define map_erase(map, key) // 擦除
#define map_clear(map) // 清空
#define map_find(map, key) // 查找
#define map_swap(map, swap) // 交换
#define map_size(map) // 获取大小
#define map_traverse(map, traverse)	 // 遍历

#define map_it(map) // 迭代器构造
#define _map_it(it) // 迭代器删除
#define map_it_to(it, type, key) // 迭代器定位
#define map_it_next(it, type) // 迭代器后移
#define map_it_prev(it, type) // 迭代器前移
#define map_it_pause(it) // 迭代器停止标志

方法的使用具体看仓库介绍和源代码

最后

此模块为笔者本人编写,如果喜欢希望点赞给星支持,有漏洞或者修改建议欢迎留言交流。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值