
STL
文章平均质量分 70
u010787096
这个作者很懒,什么都没留下…
展开
-
STL unordered_map中自定义key的约束
开始之前,先上。原创 2024-01-10 11:37:39 · 423 阅读 · 0 评论 -
STL 使用问题 -- 理解相等和等价的区别
关联容器的比较函数class Compare=std::less,默认的std::less只是简单的调用了元素对象的oparator原创 2023-11-24 18:00:14 · 142 阅读 · 0 评论 -
STL容器选择的建议
vector,deque,list中选择:这三种容器提供了不同的复杂性,vector是默认应使用的序列类型;在选择容器时需要全盘考虑,需要关心元素的排列情况、迭代器的能力、元素布局与C接口的兼容性、查找速度、引用计数所引起的反常行为、以及迭代器在何种情况下失效等等。如果是,就要考虑哈希容器、排序的vector、有序的关联容器 -- 或许这就是优先顺序。标准库中现在有13种容器 STL 概述,可作出选择有很多,选择的多样性也意味着在选择时需要考虑多种因素。如果是,就需要使用基于节点的容器。原创 2023-11-22 18:47:02 · 59 阅读 · 0 评论 -
STL使用建议
而且,成员函数begin()、end(),rbegin()、rend()、front()、back()、data()、find()、lower_bound()、upper_bound()、equal_range()、at()和除了关联容器中的operator[]对于线程安全的目标表现如同const(即它们亦能同时在同一容器上由不同线程调用)。上面第2点建议容器中存放指针而不是对象,这就带来了这个问题,从这样的容器中删除某个元素时,这个元素指针所分配的堆内存并不会释放,需要我们自己去释放。原创 2023-11-10 17:41:22 · 67 阅读 · 0 评论 -
正确选择搜索算法
如果使用lower_bound(如果能找到则返回第一个的位置,如果没有找到,就返回这个元素应该插入的位置),判断返回的这个迭代器,if(retIter!=last&&*retIter==value),这里有一个错误,*retIter==value,就是这句,lower_bound是等价搜索的,多数情况下,等价和相等结果是相同的,但是不一致的情况也是会有的,参考理解相等和等价的区别,这种情况下,这代码是错的。正确做法是检查lower_bound返回的迭代器所指的对象是否等价于你要的查找的值。原创 2023-11-10 17:27:55 · 73 阅读 · 0 评论 -
(STL哈希) _ unordered_set
与 std::set 不同,std::unordered_set 中元素的顺序是不确定的,它使用哈希函数来快速访问、插入和删除元素。哈希函数将元素的键转换为一个哈希值,然后用该哈希值来映射到对应的桶中,每个桶中存储一组键值相同的元素。当需要访问、插入或删除某个元素时,首先根据哈希函数计算出该元素对应的桶的位置,然后在该桶中查找该元素。查找元素的时间复杂度取决于哈希函数的质量,最坏情况下会退化为线性时间复杂度 O ( n ) O(n)O(n)。元素的顺序是不确定的,不能保证元素的插入顺序就是元素的访问顺序。原创 2023-11-09 18:16:13 · 118 阅读 · 0 评论 -
STL如何选择算法
比如关联容器中的set::find,和算法的std::find(这个在理解相等和等价有提到过结果不同),不仅如此,实现的方式也不同,关联容器的set::find是对数时间运行,而算法的std::find是线性时间。这些算法为了完成自己的任务,在其内部都是循环。std::merge和list::merge,合并两个容器,std::merge,将两个容器中的合并带第三个上面,不允许修改其两个元区间,而list::merge总是在修改它所操作的链表。而std::remove却没有,还需要list::erase。原创 2023-11-08 17:39:17 · 57 阅读 · 0 评论 -
(STL哈希)unordered_map
unordered_map是C++标准库中的一个关联式容器,它是基于哈希表实现的。unordered_map提供了一种存储键值对的方式,每个键唯一对应一个值。它被设计为在平均情况下具有常数时间复杂度的插入、查找和删除操作。unordered_map与map的用法类似,但其内部结构不同。unordered_map使用哈希函数将键映射到桶(bucket)中,并在桶内使用链表或其他数据结构解决冲突。通过哈希函数和桶的结构,可以快速定位键对应的值。⭕函数特点。原创 2023-11-09 18:01:52 · 239 阅读 · 0 评论 -
慎重选择排序算法
这时候暗箱操作一下,你是教计算机的老师,你希望计算根据C++单科成绩靠前的来(你早就想到了这一天,你都学生们打分的时候就没有重复的),你可以重写一个按C++单科比较的比较函数,做一个全排列,然后再用上面的两个函数排出前10个,这时候你发现一个问题,可能选出的5个人不是C++单科成绩靠前的,因为partial_sort、nth_element都不是稳定排序的操作。对于排序,首先想到是sort和qsort,这两个首选sort,因为sort传入比较的函数对象,而qsort传入比较函数的指针,会多函数调用的过程。原创 2023-11-08 17:36:34 · 67 阅读 · 0 评论