zoukankan      html  css  js  c++  java
  • 关于map::operator[]与map::insert (浏览次数:1002)

    发表于2008-7-18 11:44:00

    /*
    * =====================================================================================
    *
    *       Filename:  map_func_select.h
    *
    *    Description:  当效率至关重要时,在map::operator[]与map::insert
    *      之间谨慎做出选择。
    *
    *        Version:  1.0
    *        Created:  中国北京标准时间:2008-7-18 11:13:49
    *       Revision:  none
    *       Compiler:  gcc
    *
    *         Author:  Jyqi , foros_001@163.com
    *        Company:  iSoftStone
    *
    * =====================================================================================
    */
    一、引言:
    当向映射表中添加元素时,要优先选用insert, 而不是operator[];
    而从效率和美学的观点考虑,结论是:当更新已经在映射表中的元素
    的值时,要优先选择operator[]。

    二、示例:
    //////////////////////////////////////////////////
    //一个同时提供高效的添加和更新功能的模板函数
    //
    template<typename MapType,  //map的类型
    typename KeyArgType,  //KeyArgType类型参数
    typename ValueArgType>  //ValueArgType类型参数
    typename MapType::iterator
    efficientAddOrUpdate(MapType& m,
       const KeyArgType& k,
       const ValueArgType& v)
    {
    typename MapType::iterator lb = //确定k在什么位置或应在什么位置;
      m.lower_bound(k); 

    if (lb != m.end() &&   //如果lb指向的pair的键与k等价,
       !(m.key_comp()(k, lb->first())) {
       lb->second = v; //则更新pair的值并返回指向该
       return lb; //pair的迭代器
       }
       else {
        typedef typename MapType::value_type MVT;
        return m.insert(lb, MVT(k, v)); //把pair<k, v>添加
           //到m中,并返回一个指向该新
           //元素的迭代器
        }
    }

    三、总结:
    当效率至关重要时,你应该在map::operator[]和map::insert之间仔细做出选择。
    如果要更新一个已有的映射表元素,则应该优先选择operator[];但如果要添加一
    个新的元素,那么最好还是选择insert。

  • 相关阅读:
    CSS 中的字体兼容写法:用CSS为英文和中文字体分别设置不同的字体
    利用vue-cropper做的关于图片裁剪、压缩、上传、预览等做的一个公共组件
    解决浏览器拦截弹出窗口问题
    详解Vue中的nextTick
    vue里ref ($refs)用法
    vue组件的hover事件模拟、给第三方组件绑定事件不生效问题
    JS实现千分位
    JS实现异步编程的4种方法
    Cas_个人理解
    zabbix_监控_邮件预警
  • 原文地址:https://www.cnblogs.com/dongzhiquan/p/1931574.html
Copyright © 2011-2022 走看看