unordered_map 笔记

目录

 

1.使用注意事项:

 2.定义

3.操作


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;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值