hash笔记

基于哈希的索引和基于树的索引有什么区别?

(1)Hash索引仅仅能满足“=”,“IN”,“<=>”查询,不能使用范围查询。
(2)hash索引无法被用来避免数据的排序操作。
(3)hash索引不能利用部分索引键查询。
(4)hash索引在任何情况时候都不能避免表扫描。
(5)hash索引遇到大量hash值相等的情况后性能并不一定就比B-Tree索引高。

STL里常用的容器及其特点

list:底层是双向链表,在当前节点前后插入新元素的效率为O(1),当然如果需要有序插入的话,还是会退化为O(n),因为需要遍历比较元素值。

vector:底层是动态数组,把数组的常用操作封装起来,方便使用,插入性能为O(n),尾插为O(2),需要注意的是,数组的空间是有限的,空间用尽时会进行扩容,因此平均下来性能比list要差一点点;

deque:双端队列,主要和vector相比较,从头插入的性能优于vector,同样也有扩容机制,头尾插入效率O/(2)。

set:底层是红黑树,要求存储的数据可以比较的,存储元素不重复,插入性能l og(n),树的平衡调整规则,会有一定的开销。

map:底层是红黑树,存储的数据类型是 pair(键值对),和 set 相比,map 对存储的值要求没那么高,而把要求转移到键上(键不能重复),插入效率log(n);
pair:通常是map的存储数据类型,只能存储来个值,为map而生。

prioruty_queue(优先队列):底层是个堆结构(大小顶堆),实刻保证队首元素是当前的极值,因此可以拿来排序,插入性能也是log(n);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值