无序关联容器

    标准当中新增加了四个无序关联容器。他们是通过哈希函数和关键字类型的==运算符来组织元素,所以不会根据key值对存储的元素进行排序。
    除了哈希管理操作之外,无序关联容器与关联容器有相同的操作,如find,insert等。

这里写图片描述

自定义关键字

    由于无序关联容器太多,这里只针对unordered_map进行说明。
    默认情况下,我们无序为unordered_map提供hash函数,因为标准库为内置类型(包括指针)提供了hash模板。但是,如果我们用自定义类类型作为关键字类型的话,就需要提供自己的hash模板

//key_type
struct KEY
{
    string author;
    int age;
    KEY(string s,int a):author(s),age(a){}

    bool operator==(const KEY &key)const {
        return author == key.author;
    }
};

//hash函数
struct myhash {
    size_t operator()(const KEY& key)const {
        return hash<string>()(key.author);    //利用了string的hash函数来实现。
    }
};
int main()
{
    unordered_map<KEY, size_t,myhash> mm;
    KEY k1("john", 20);
    KEY k2("awith", 30);
    mm.insert({ k1,10 });
    mm.insert({ k2,20 });

    for (auto it = mm.begin();it != mm.end();it++) {
        cout << it->first.author.c_str() << endl;
    }


    system("pause");
    return 0;
}

结果

桶管理

    由于使用hash函数来组织元素,所有就会产生冲突,无序关联容器在存储上组织为一组桶。使用哈希函数将元素映射到桶中,具有相同的哈希值的所有元素在相同的桶中,如果容器允许重复关键字,具有相同的关键字的元素也在同一桶中。无序关联容器的性能依赖于哈希函数的质量和桶的数量和大小。

操作

unordered_map与map的区别

  1. 在运行效率方面:unordered_map高,而map效率低但提供了稳定效率和有序。
  2. 占用内存方面:map内存占用略低,unordered_map内存略高,而且是线性成比例的。
  3. 需要无序容器,快速查找删除,不担心略高的内存时用unordered_map;有序容器稳定查找删除效率,内存很在意时候用map。
  4. 非频繁用map比较稳定,频繁的查询用hash_map效率会高一点,c++11中的unordered_map查询效率会更高一些,但是内存占用比hash_map稍微大点;
  5. 若考虑有序,查询速度稳定,容器元素量少于1000,非频繁查询那么考虑使用map。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值