c++STL用法总结

一、vector的用法

vector<int> vet;

1、排序:sort(vet.begin(), vet.end()), 时间复杂度O(nlogn)
2、查找:if(find(vet.begin(), vet.end(), x) != vet.end()), 时间复杂度O(n)

二、string的用法

string st1, st2;

1.查找: int pos = st1.find(st2), 从st1中找到一个等于st2的串,并返回第一次出现的位置
//为避免重复查找,可以在找到一个串之后,就将这个串进行更新

三、lower_bound & upper_bound

对于有序数组a而言,在O(logn)时间内返回查找结果

lower_bound: 
①int x = lower_bound(a + 1, a + 1 + n, num) - a : 下标从1开始,返回第一个大于等于num的数的位置
②int x = lower_bound(a, a + n, num) - a : 下标从0开始,返回第一个大于等于num的数的位置

upper_bound和lower_bound用法类似,但是返回的是第一个大于num的数的位置

需要注意的是,使用的时候,要注意判断是否找到我们想要的结果。如果返回的位置为n + 1, 说明没找到,这个时候要进行特判!

四、二维map使用


五、map和unordered_map

  • map: 基于红黑树,有序(红黑树可自动排序),可在log(n)内完成插入、查找、删除,对单次时间敏感的条件下建议使用。
  • unordered_map: 基于hash_table,vector节点挂链表解决冲突,元素无序,数据存储、查询时间复杂度低,可以说是常数,属于空间换时间。
posted @ 2022-09-06 12:54  风归去  阅读(38)  评论(0编辑  收藏  举报