map是一个key-value值对,key唯一,可以用find进行快速的查找。其时间复杂度为O(logN),如果采用for循环进行遍历数据时间复杂度为O(N)。如果map中的数据量比较少时,采用find和for循环遍历的效率基本没有太大的区别,但是在实际的开发过程中,存储在map中的数据往往是大量的,这个时候map采用find方式效率比遍历效率高的...
一. map、set、multimap、multiset 上述四种容器采用红黑树实现,红黑树是平衡二叉树的一种。不同操作的时间复杂度近似为: 插入: O(logN) 查看: O(logN) 删除: O(logN) 二. unordered_map、unordered_set、unordered_multimap、 unordered_multiset 上述四种容器采用哈希表实现,不同操作的时间复杂度为: 插入: O(...
1、STL中map用法详解说明:如果你具备一定的C+ template知识,即使你没有接触过STL这个文章你也应该可能较轻易的看懂。本人水平有限,不当之处,望大家辅正。一 Map 概述Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在 map 中出现一次,第二个可能称为该关键字的值)的数据处理...
//扩容Map集合staticvoiddilatationHash(HashMap *hashMap){//原来的容量int capacity = hashMap->capacity;//扩容后的容量hashMap->capacity=expansionBase(hashMap);//节点长度清空hashMap->nodeLen=0;//创建新的存储区域Entry **newList=(Entry **)calloc(hashMap->capacity,sizeof(Entry));//遍历旧的存储...
map(映射)和multimap(多重映射):查找时间复杂度为O(log n),底层通常使用红黑树实现,按键进行自动排序。 stack(栈)和queue(队列):查找时间复杂度为O(n),因为它们是容器适配器,提供了先进先出(FIFO)或后进先出(LIFO)的接口,并不支持快速查找操作。
之前的map的底层实现就是平衡二叉搜索树,但是unordered_map的底层实现是用哈希表,所以map的时间复杂度是logn,而unordred_map不是,unordered_map时间复杂度不稳定,平均为O(c),取决于哈希函数。极端情况下可能为O(n) 存储方式 链式存储 数组存储 父节点的数组下表是i,那么它的左孩子就是i * 2 + 1,右孩子就...
《算法导论》这本书指出,红黑树检索的时间复杂度为Log2(N),这是比较高效的算法,例如: 如果map包含64个记录,查询某个记录最多只需要对比6次; 包含1000个记录的map,查询某个记录最多只需要搜索10次; 包含100万个记录的map,查询某个记录最多只需要搜索20次。
接上文,在理解了时间复杂度的概念后,就可以根据实际的代码进行度量了,以下举例了几个常用的时间复杂度的表示,对于如何度量其最重要的是观察程序中的循环结构,每一个循环结构代表执行循环中的指令n次,而其余指令一般而言一行代码代表执行一次,对于一个程序而言,执行的次数相差较小其实没有什么区别,都是一瞬间执行完毕...
- 高效查找:通过键来查找值的操作时间复杂度通常为O(1),即常数时间复杂度。 - 无序性:与数组不同,map中的元素没有固定顺序,不能通过索引直接访问。 2.3 map结构的应用场景 Map结构在C语言中有着广泛的应用场景,包括但不限于以下几个方面: - 数据存储和检索:适合存储大量数据并能够快速查找某个特定键对应的...