解决map和set的一点疑虑

来源:互联网 发布:淘宝上积分在哪儿呢 编辑:程序博客网 时间:2024/03/28 23:29

点击查看原文

最近在学习C++容器,发现c++容器和java容器一样好用,尤其是vector,list,map,set,甚至包括string(string的操作方法与vector有很多相似之处)。vector是线性容器,对于线性操作效率非常高,使用也非常简单。map和set中的元素始终保持自小到大的顺序排列,这个排列过程在插入(insert)时就自动完成了,这个特性堪称perfect,可以为我们省去繁琐的排序需求。起初我很怀疑这个排序的效率,如果要使大量数据发生移动,那就和vector没什么区别了,想到这个问题,我上网查了map和set的资料,才知道它们是由平衡检索二叉排序树实现的,恍然大悟。数据结构中曾讲过这种特殊二叉树的实现,在插入新节点和删除节点时并不需要改变原节点的位置,只要修改几个指针的方向就保证了新操作后的有序,从而避免了内存移动(map<K,T>::iterator在插入和删除操作中也就不会失效)。二叉排序树不仅在插入和删除操作中有很好的效率,在查找操作中也相当有优势,有序的序列可采用二分法查找,大大减少了比较数量,使得要查找的元素被迅速瞄准。想到这里,map和set各种操作的效率也就毋庸置疑了,放心大胆的用吧!

原创粉丝点击