资料:
在map中,键值key通常用于排序和惟一地标识元素。
map中的元素总是按照键值key进行比较排序的。
一、添加元素(四种方式)
二、访问元素(四种方式)
- 其中一种:使用迭代器进行正向遍历(while循环),如下。
map<int,int> mp;
auto it = mp.begin();
while(it != mp.end())
{
cout << it->first << " " << it->second << "\n";
it ++;
}
三、查找元素(最优方法是,先判断存在与否,再索引对应值。防止创建空的键值对)
四、二者的比较
map:内部用红黑树实现,内部元素具有有序性
缺点:占用空间。
unordered_map:内部用哈希表实现,查找速度非常快
缺点:建立哈希表比较耗时。
C++STL之map和unordered_map详解_c++ unordered_map和map_info825的博客-CSDN博客
自己写的:
写的时候在想,怎么用for循环遍历呢?
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param numbers int整型vector
* @return int整型
*/
int MoreThanHalfNum_Solution(vector<int>& numbers) {
// write code here
unordered_map<int, int> hash;
int res;
for(int i = 0;i < numbers.size(); i++){
if(hash.find(numbers[i]) == hash.end())
hash[numbers[i]] = 1;
else{
hash[numbers[i]] += 1;
}
//调试后,判断放外面
if(hash[numbers[i]] > numbers.size()/2.0){
res = numbers[i];
break;
}
}
return res;
}
};
模板:
hash默认初始化就是0,所以hash[numbers[i]]可以直接++,不需要先=1,再++。