stl clocklist 查找元素_Leetcode 中我用到的C++ STL 容器及方法(持续更新中)

众所周知,C++的入门门槛比较高,我个人觉得大部分新手在入门c++的时候都是由于标准库中庞大的工具链,比如说分配器,迭代器,算法,容器等六大组件。我个人也是如此,在学校里学过C,C++, 学的而且不深,只是做了一些简单的作业和考试就草草结束。在找工作或者刷题的时候经常被问的手足无措。

接下来我就把我在刷C++ Leetcode中遇到的一些标准库中的容器列出来,防止我以后不能坚持刷题又忘了。

1, unordered_map:

unordered_map 是关联容器,含有带唯一键的键-值 pair 。搜索、插入和元素移除拥有平均常数时间复杂度。

元素在内部不以任何特定顺序排序,而是组织进桶中。元素放进哪个桶完全依赖于其键的哈希。这允许对单独元素的快速访问,因为一旦计算哈希,则它准确指代元素所放进的桶。

std::unordered_map 满足容器 (Container) 、具分配器容器 (Allocator Aware Container) 、无序关联容器 (Unordered Associative Container) 的要求。
注:unordered_mapmap的最大区别就是前者并不排序,后者容器内部会自动排序。

LC 347 Top K Frequent Elements中用到的unorder_map方法:

unordered_map<int, int> count; //定义key是int, value是int的无序映射散列表

unordered_map<int, vector<int>> buckets; //定义key是int, value是int类型的vector的无序散列表

for (auto &item : count)
    item.first // key
    item.second // value 
auto it = buckets.find(key) // //返回查找到元素的iterator,如未查找到,返回end()
it->second.begin(), it->second().end //就是buckcts键值对中的vector<int> 的第一个和最后一个index

c++ unordered_map 判断某个键是否存在

find函数。

iterator find ( const key_type& key );

如果key存在,则find返回key对应的迭代器,如果key不存在,则find返回unordered_map::end。因此可以通过

map.find(key) == map.end()

来判断,key是否存在于当前的unordered_map中

Count函数

size_type count ( const key_type& key ) const

count函数用以统计key值在unordered_map中出现的次数。实际上,c++ unordered_map不允许有重复的key。因此,如果key存在,则count返回1,如果不存在,则count返回0.


2, vector

vector几乎大部分题目都有涉及,就不做题型分析,只更新用到的方法

vector<int> ans;

ans.size()表示vector当前的大小

ans.insert(被插入的位置index,插入的值)

ans.insert(被插入的位置index,插入几个这样的值,插入的值)

模板和迭代器配合之后的用法

template< class InputIt >
void insert( iterator pos, InputIt first, InputIt last);		(C++11 前)
template< class InputIt >
iterator insert( const_iterator pos, InputIt first, InputIt last );
// 模板函数 first 和 last 两个迭代器中的数据 为要插入的数据。

3. LinkedList

LinkedList题目中如果返回的还是LinkedList, 一般套路是要自己建两个ListNode, 一个是head, 一个是结果。比如:

ListNode* head = new ListNode(0)

ListNode* result = head

注意当前链表不能为nullptr。然后迭代到下一个指针的时候也要判断不能为nullptr.

return 的结果是result->next

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值