zoukankan      html  css  js  c++  java
  • 笔试之STL

    1. map是如何实现的?它的keys是否经过排序?如何实现它的clear方法?


      A 实现:

      map是通过红黑树来实现的,keys是经过排序的;

      map的所有元素都是pair,同时拥有实值(value)和键值(key),pair的第一个元素被视为key,第二个元素被视为value;

      map不允许两个元素拥有相同的键值;

      map的插入删除操作,不会使迭代器失效。

      增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响。对于迭代器来说,可以修改实值,而不能修改key。

      B 功能:

    1. 根据key值快速查找记录,查找的复杂度基本是Log(N),如果有1000个记录,最多查找10次,1,000,000个记录,最多查找20次。
    2. 快速插入Key - Value 记录。
    3. 快速删除记录
    4. 根据Key 修改value记录。
    5. 遍历所有记录。

      C 性能问题:

      enumMap[2] = "Two";

      这样非常直观,但存在一个性能的问题。

      1)查找操作:插入2时,先在enumMap中查找主键为2的项

      2)插入对象:如果查找没有发现,然后将一个新的对象插入enumMap,键是2,值是一个空字符串

      3)赋值操作。插入对象完成后,将字符串赋为"Two";

      该方法会将每个值都赋为缺省值,然后再赋为显示的值,如果元素是类对象,则开销比较大。我们可以用以下方法来避免开销:

    enumMap.insert(map<int, CString> :: value_type(2, "Two"))

      

      D clear方法的实现:

    2. hash_map的实现原理以及与map的对比,什么时候该使用map,什么时候该使用hash_map?


      hash_map 的用法和 map 是一样的,提供了 insert,size,count等操作,并且里面的元素也是以 pair 类型来存贮的。虽然对外部提供的函数和数据类型是一致的,但是其底层实现是完全不同的,map底层的数据结构是rb_tree而,hansh_map却是哈希表来实现的。

      对比:  

      查找速度:hash_map 查找速度会比map快,而且查找速度基本和数据量大小无关,属于常数级别;而map的查找速度是log(n)级别;

      hash 还有 hash 函数的耗时。当有100w条记录的时候,map也只需要20次的比较,200w也只需要21次的比较!所以并不一定常数就比log(n) 小!

      内存空间:

      hash_map对空间的要求要比map高很多,所以是以空间换时间的方法,而且,hash_map如果hash函数和hash因子选择不好的话,也许不会达到你要的效果,所以至于用map,还是hash_map,从3个方面来权衡:查找速度, 数据量, 内存使用,还有一个就是你的经验!没有特别的标准

  • 相关阅读:
    PyCharm安装及其使用
    web端自动化——Selenium3+python自动化(3.7版本)-chrome67环境搭建
    Unittest单元测试框架
    selenium IDE下载安装(For Chrome and firefox)
    视频上传测试点
    web端自动化——自动化测试准备工作
    selenium3+Python3+sublime text3自动化登录
    Sublime Text3安装及常用插件安装
    web端自动化——selenium3用法详解
    Selenium2+python自动化2.7-火狐44版本环境搭建(转)
  • 原文地址:https://www.cnblogs.com/wiessharling/p/4336205.html
Copyright © 2011-2022 走看看