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个方面来权衡:查找速度, 数据量, 内存使用,还有一个就是你的经验!没有特别的标准

  • 相关阅读:
    ASE19团队项目 beta阶段 model组 scrum report list
    ASE19团队项目 beta阶段 model组 scrum7 记录
    ASE19团队项目 beta阶段 model组 scrum6 记录
    ASE19团队项目 beta阶段 model组 scrum5 记录
    ASE19团队项目 beta阶段 model组 scrum4 记录
    ASE19团队项目 beta阶段 model组 scrum3 记录
    ASE19团队项目 beta阶段 model组 scrum2 记录
    ASE19团队项目 beta阶段 model组 scrum1 记录
    【ASE模型组】Hint::neural 模型与case study
    【ASE高级软件工程】第二次结对作业
  • 原文地址:https://www.cnblogs.com/wiessharling/p/4336205.html
Copyright © 2011-2022 走看看