关于哈希表一种数据结构---std::unordered_set

输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]

unordered_set成员方法.find(key)

unordered_set.find(key)

查找值为key的元素,如果找到,就返回指向该元素的正向迭代器;反之,则返回尾后迭代器(结束迭代器)。

unordered_set.end()

直接返回尾后迭代器。即返回指向容器最后一个数据单元+1的指针。

unordered_set<int> result_set;

定义哈希表存放结果

unordered_set<int> nums_set(nums1.begin(), nums1.end());

实现功能:[1,1,2,3,3]->[1,2,3],即去除重复元素。

if(nums_set.find(num) != nums_set.end())

这个判断语句的作用是:如果在nums2中找到了存在在nums_set中的元素,那么.find()返回的不是尾迭代器,所以进入if判断语句,然后将元素,放进result_set中;如果没有找到也就是说nums2中存在和nums_set不重复的数,即返回end迭代器,继续下一次循环。

随笔

1、C++运算法 / 代表除法运算,如果商含有小数,则直接弃除。例:1/10的值为0。
2、如果题目要求是判断某一个元素是否出现在集合里的时候,就要考虑使用哈希法,(unordered_set)
3、哈希法一般会使用的三种数据结构:

  1. 数组
  2. set(集合)
  3. map(映射)

在C++中,set 和 map 分别提供以下三种数据结构:

set

  1. std::set
  2. std::multiset
  3. std::unordered_set

map

  1. std::map
  2. std::multimap
  3. std::unordered_map

关于unordered_map:
unordered_map和map类似,都是存储的key-value的值,可以通过key快速索引到value。不同的是unordered_map不会根据key的大小进行排序,存储时是根据key的hash值判断元素是否相同,即unordered_map内部元素是无序的。

关于map和set:
map是指两个集合之间元素的相互之间的关系,一个元素对应另外的元素。
而set是存储同以数据类型的数据类型,就是没有所谓的对应关系。

关于C++中的iterator->second

std::unordered_map<int,int> map;

实际上是存储了一串std::pair
如果定义auto iter = map.begin();
就是说lter这个迭代器相当于指向了map的第一个元素的pair,然后这个时候可以访问这个pair的两个元素:

(*iter).first//得到key值
(*iter).second//得到value值

等价与:

iter->first
iter->second

函数erase:

(1)erase ( size_t pos = 0, size_t n = npos );删除从pos开始的n个字符,比如erase(0,1)就是删除第一个字符
(2)iterator erase ( iterator position );删除position处的一个字符(position是个string类型的迭代器)
(3)iterator erase ( iterator first, iterator last );删除从first到last之间的字符(first和last都是迭代器)

vector<vector<int>> C

相当于容器的嵌套,最里面是int型,外层是vector类型,类似于二元数组。

continue

跳出本次循环,开始下一次循环。

break

直接终止循环,执行循环下面的语句。

你可能感兴趣的:(菜鸟的LeetCode,c++)