c++ list, vector, map, set 使用比较

本文通过一个实际需求——按特定顺序显示国家树,探讨并比较C++中list、vector、map和set的使用和效率。vector适合随机访问,但头部插入效率低;list适合频繁插入,但访问慢;map和set利用红黑树实现快速查找,set不允许重复元素,map包含键值对;Hash_Map通过Hash加速查找,但占用更多内存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在自己的工作中,有这样一个小功能需要实现。程序中有一个国家树,甲方单位提出要能按照字母表顺序排序,如果这样需要做或者导入汉字字母对应表,工作量太大,太繁琐。后来想了一下,反正国家地区就只有200多个,通过一个XML文件把国家顺序排列好,程序通过读取XML文件中的国家顺序来显示。
在这里插入图片描述
整个流程:
程序读取需要显示的国家,保存为data1
读取XML文件中国家顺序,保存为data2
将data1按照data2顺序排列
显示在树上

使用这个小例子学习比较下list, vector, map, set的效率
List封装了链表,Vector封装了数组, list和vector得最主要的区别在于vector使用连续内存存储的,他支持[]运算符,而list是以链表形式实现的,不支持[]。
Vector对于随机访问的速度很快,但是对于插入尤其是在头部插入元素速度很慢,在尾部插入速度很快。List对于随机访问速度慢得多,因为可能要遍历整个链表才能做到,但是对于插入就快的多了,不需要拷贝和移动数据,只需要改变指针的指向就可以了。另外对于新添加的元素,Vector有一套算法,而List可以任意加入。
Map,Set属于标准关联容器,使用了非常高效的平衡检索二叉树:红黑树,他的插入删除效率比其他序列容器高是因为不需要做内存拷贝和内存移动,而直接替换指向节点的指针即可。
Set和Vector的区别在于Set不包含重复的数据。Set和Map的区别在于Set只含有Key,而Map有一个Key和Key所对应的Value两个元素。
Map和Hash_Map的区别是Hash_Map使用了Hash算法来加快查找过程,但是需要更多的内存来存放这些Hash桶元素,因此可以算得上是采用空间来换取时间策略。

1.vector
首先使用vector进行排序

void CstlDlg::sort()
{
   
   
	vector<CString> TempData;
	int size = XmlData.size();
	f
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值