unordered_map 笔记
程序员文章站
2022-05-12 23:33:29
...
目录
1.使用注意事项:
C++11标准之前使用unordered_map, 需要加
#include<tr1/unordered_map>
using namespace std::tr1;
2.定义
template<class Key,
class Ty,
class Hash = std::hash<Key>,
class Pred = std::equal_to<Key>,
class Alloc = std::allocator<std::pair<const Key, Ty> > >
class unordered_map;
> class unordered_map
第1个参数Key,存储key值。 Key主键的类型,在类模板内部,使用其别名为 key_type 的成员类型
第2个参数Ty,存储mapped value。T 被映射的值的类型,在类模板内部,使用其别名为 mapped_type 的成员类型
第3个参数Hash,为哈希函数的函数对象。Hash将key作为参数,并利用函数对象中的哈希函数返回类型为size_t的唯一哈希值。默认值为std::hash<key>。
第4个参数Pred,为等比函数的函数对象。它内部通过等比操作符’=='来判断两个key是否相等,返回值为bool类型。默认值是std::equal_to<key>。在unordered_map中,任意两个元素之间始终返回false。
3.操作
成员函数:
=================迭代器=========================
begin 返回指向容器起始位置的迭代器(iterator)
end 返回指向容器末尾位置的迭代器
cbegin 返回指向容器起始位置的常迭代器(const_iterator)
cend 返回指向容器末尾位置的常迭代器
=================Capacity================
size 返回有效元素个数
max_size 返回 unordered_map 支持的最大元素个数
empty 判断是否为空
=================元素访问=================
operator[] 访问元素
at 访问元素
=================元素修改=================
insert 插入元素
erase 删除元素
swap 交换内容
clear 清空内容
emplace 构造及插入一个元素
emplace_hint 按提示构造及插入一个元素
================操作=========================
find 通过给定主键查找元素,没找到:返回unordered_map::end
count 返回匹配给定主键的元素的个数
equal_range 返回值匹配给定搜索值的元素组成的范围
================Buckets======================
bucket_count 返回槽(Bucket)数
max_bucket_count 返回最大槽数
bucket_size 返回槽大小
bucket 返回元素所在槽的序号
load_factor 返回载入因子,即一个元素槽(Bucket)的最大元素数
max_load_factor 返回或设置最大载入因子
rehash 设置槽数
reserve 请求改变容器容量
代码如下:
#include <tr1/unordered_map>
#include <iostream>
#include <string>
using namespace std::tr1;
using namespace std;
void PrintMap(unordered_map<int, double>& m, char* pre)
{
unordered_map<int, double>::iterator tmp;
cout << pre;
for (tmp = m.begin(); tmp != m.end(); ++tmp)
{
cout << "(" << tmp->first << ", " << tmp->second << ")" << " ";
}
cout << endl;
}
int main()
{
unordered_map<int, double> m;//键的类型 int,值的类型double
m[0] = 0.99;//创建
//普通插入,使用类型转换
m.insert(unordered_map<int, double>::value_type(1, 1.99));
PrintMap(m, "插入元素之前的m:");
//插入一个范围
unordered_map<int, double> m2;
m2.insert(unordered_map<int, double>::value_type(3, 3.99));
m2.insert(unordered_map<int, double>::value_type(4, 4.99));
m2.insert(unordered_map<int, double>::value_type(5, 5.99));
m.insert(m2.begin(), m2.end());
PrintMap(m, "插入插入一个范围m:");
unordered_map<int, double>::iterator pTmp;
pTmp = m.find(4);
if (pTmp != m.end())
{
cout << "m.find(4): ";
cout << "(" << pTmp->first << ", " << pTmp->second << ")" << endl;
}
cout<<endl;
//如果key存在,则count返回1,如果不存在,则count返回0.
//键值的个数
cout<<"主键元素的个数:"<<m.count(1)<<endl;
m.clear();
PrintMap(m,"清空");
return 0;
}
上一篇: leetcode#59 Spiral Matrix II
下一篇: 怎样截取内容得到图片地址??