0%

c++ unodered_set

c++的哈希集合(unodered_set)

定义

1
2
3
4
5
6
7

//定义
unordered_set<int> c1;

//operator=
unordered_set<int> c2;
c2 = c1;

基本操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

//查找函数 find() 通过给定主键查找元素
unordered_set<int>::iterator find_iter = c1.find(1);

//value出现的次数 count() 返回匹配给定主键的元素的个数
c1.count(1);

//返回元素在哪个区域equal_range() 返回值匹配给定搜索值的元素组成的范围
pair<unordered_set<int>::iterator, unordered_set<int>::iterator> pair_equal_range = c1.equal_range(1);

//插入函数 emplace()
c1.emplace(1);

//插入函数 emplace_hint() 使用迭代器
c1.emplace_hint(ite_begin, 1);

//插入函数 insert()
c1.insert(1);

//删除 erase()
c1.erase(1);//1.迭代器 value 区域

//清空 clear()
c1.clear();

//交换 swap()

容量操作

1
2
3
4
5
6
7
8
9

//判断是否为空
c1.empty();

//获取元素个数 size()
c1.size();

//获取最大存储量 max_size()
c1.max_size();

迭代操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

//返回头迭代器 begin()
unordered_set<int>::iterator ite_begin = c1.begin();

//返回尾迭代器 end()
unordered_set<int>::iterator ite_end = c1.end();

//返回const头迭代器 cbegin()
unordered_set<int>::const_iterator const_ite_begin = c1.cbegin();

//返回const尾迭代器 cend()
unordered_set<int>::const_iterator const_ite_end = c1.cend();

//槽迭代器
unordered_set<int>::local_iterator local_iter_begin = c1.begin(1);
unordered_set<int>::local_iterator local_iter_end = c1.end(1);

运用

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:

输入: s = “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:

输入: s = “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:

输入: s = “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,”pwke” 是一个子序列,不是子串。
示例 4:

输入: s = “”
输出: 0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public:
int lengthOfLongestSubstring(string s) {
unordered_set<char> str;
int n = s.length();
int rk = -1, ans = 0;
//右指针等于-1,枚举左指针位置
for(int i = 0; i <n; i++){
if ( i != 0)
//左指针向右移动一格,移除一个元素
str.erase(s[i-1]);

while (rk+1 < n && !str.count(s[rk+1])){
str.insert(s[rk+1]);
rk++;
}
ans = max(ans,rk-i+1);
}
return ans;
}
};