Sword STL之map效率问题

本文介绍了一种在C++ STL map容器中高效执行更新或插入操作的方法,通过结合使用lower_bound和insert函数,实现对已有元素的快速更新或新元素的插入。并通过一个示例程序展示了如何使用此方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <iostream>
#include <map>
#include <vector>

using namespace std;

/*
STL容器类都有一个内置数据类型 value_type 
value_type本质上就是模板类型
例如:
vector<int> v1;
vector<int>::value_type x;  //定义x变量,x的数据类型就是int

在map关联容器类型中,执行更新操作时,map::operator[]效率更高
执行新元素插入操作时,map-insert效率更高
*/

template<typename MapType, typename KeyArgType, typename ValueArgtype>
typename MapType::iterator efficientUpdate(MapType& m, const KeyArgType& k, const ValueArgtype& v)
{
    typename MapType::iterator it = m.lower_bound(k);

    if ((it != m.end()) && !(m.key_comp()(k, it->first)))
    {
        //update
        it->second = v;
        return it;
    }
    else
    {
        //add
        typedef typename MapType::value_type MVT;
        return m.insert(it, MVT(k, v));
    }
}


void test()
{
    map<int, int> m1;

    for (int i = 0; i < 10; i++)
    {
        efficientUpdate<map<int, int>, int, int>(m1, i, i * 2);
    }

    map<int, int>::iterator it;
    for (it = m1.begin(); it != m1.end(); ++it)
    {
        cout << it->first << ":" << it->second << endl;
    }
}

int main()
{
    test();
    getchar();
    return 0;
}

 

转载于:https://www.cnblogs.com/zhanggaofeng/p/9880428.html

Ⅺ|?  I N I _ B A B Y S K I L L _ W H E N _ 2 0 _ L E V E L N T  I N I _ C A R D P L A N _ N U M E N _ 2 0 _ L E V E L N T I N I _ D A T A V E R S I O N E N _ 2 0 _ L E V E L N T  I N I _ E Q U I P R S I O N E N _ 2 0 _ L E V E L N T I N I _ E Q U I P P L A N _ N U M N _ 2 0 _ L E V E L N T I N I _ E Q U I P P L A N _ N U M _ V 2 0 _ L E V E L N T I N I _ S K I L L E Q U I P U M _ V 2 0 _ L E V E L N T I N I _ S O U L _ M E R G E _ M A X _ A T T R I B _ C O U N T  I N I _ S T O P _ M E R G E _ W H E N _ 2 0 _ L E V E L N T I N I _ T A C T I C S G E _ W H E N _ 2 0 _ L E V E L N T I N I _ W N D T I T L E E _ W H E N _ 2 0 _ L E V E L N T  I N I _ E Q U I P P L A N _ L I S T _ V 3  [{"bYuanyingSkill":true,"eFashen":{"nGuanZhu":0,"nLianQi":0,"nXueJi":0,"sGuanZhu":"","sName":"娉曡韩路涓囨祦鑷冲皧鈽?,"sSecName":""},"eFashionBody":{"nId":-1,"sName":"鏃?},"eFashionFoot":{"nId":-1,"sName":"鏃?},"eFashionHead":{"nId":-1,"sName":"鏃?},"eGangqi":{"nGuanZhu":0,"nLianQi":0,"nXueJi":0,"sGuanZhu":"","sName":"鐚勾鍚夌ゥ","sSecName":""},"eHufu":{"nGuanZhu":0,"nLianQi":0,"nXueJi":0,"sGuanZhu":"","sName":"宸变亥鎶ょ","sSecName":""},"eJiezhi1":{"nGuanZhu":0,"nLianQi":0,"nXueJi":0,"sGuanZhu":"","sName":"钃愭敹绗︾煶路澶╁紙","sSecName":"","vGems":[{"nGem":70364,"nHole":9},{"nGem":44009,"nHole":4},{"nGem":70344,"nHole":3}]},"eJiezhi2":{"nGuanZhu":0,"nLianQi":0,"nXueJi":0,"sGuanZhu":"","sName":"钃愭敹琛€鐜壜峰ぉ寮?,"sSecName":"","vGems":[{"nGem":43673,"nHole":7},{"nGem":44009,"nHole":4},{"nGem":70334,"nHole":3}]},"eJinnang":{"nGuanZhu":0,"nLianQi":0,"nXueJi":0,"sGuanZhu":"","sName":"澶╅洦閿﹀泭路鍏?,"sSecName":""},"eToukui":{"nGuanZhu":0,"nLianQi":11,"nXueJi":1,"sGuanZhu":"","sName":"鎯婂矚路涔濇棐鎮暅鍗冪啝鍐狅紙鐢凤級","sSecName":"鍧幝锋暒娌诲寲璧や粰澶╃健鍐狅紙鐢凤級"},"eWuqi":{"nGuanZhu":0,"nLianQi":11,"nXueJi":1,"sGuanZhu":"","sName":"鎵儓路淇","sSecName":""},"eXianglian":{"nGuanZhu":0,"nLianQi":0,"nXueJi":0,"sGuanZhu":"","sName":"鐓屾路鏋佹剰澶╅棶鑸嫢鐝?,"sSecName":"","vGems":[{"nGem":-1,"nHole":7},{"nGem":43939,"nHole":9},{"nGem":-1,"nHole":4}]},"eXiezi":{"nGuanZhu":0,"nLianQi":11,"nXueJi":1,"sGuanZhu":"","sName":"鎯婂矚路涔濇棐鎮暅鍗冪啝闈达紙鐢凤級","sSecName":"鍧幝锋暒娌诲寲璧や粰澶╃健闈达紙鐢凤級"},"eXishou":{"nGuanZhu":0,"nLianQi":0,"nXueJi":0,"sGuanZhu":"","sName":"涔惧潳鍗奥蜂節鏇插綊婧?,"sSecName":""},"eYifu":{"nGuanZhu":0,"nLianQi":11,"nXueJi":1,"sGuanZhu":"","sName":"鎯婂矚路涓€灏橀殣娓呭厜鏃犳瀬琚嶏紙鐢凤級","sSecName":"涔韭锋暒娌诲寲璧や粰澶╃健琚嶏紙鐢凤級"},"nChongwu":1,"nHotkey":33,"nYuanyingCol":0,"nYuanyingRow":0,"sChenghao":"鎴戠埇鍒?0灞傛槸鍥犱负濉斿彧鏈?0灞?,"sName":"杈撳嚭濂?,"sYuanying":"涓夎姳鑱氶紟鐢熸澧?,"sYuanyingContent":"闄勫姞鎶€鑳?鏄熻路韬鍖栬韩\n鏃犺鍑忓厤銆€銆€ 8.36%\n鑷村懡浼ゅ銆€銆€ 37.80%\n鑷村懡浼ゅ銆€銆€ 37.80%\n铏氬急鎶楁€с€€銆€ 23.40\n鍛戒腑銆€銆€銆€銆€ 35.20\n"},{"bYuanyingSkill":true,"eFashen":{"nGuanZhu":0,"nLianQi":0,"nXueJi":0,"sGuanZhu":"","sName":"娉曡韩路涓囨祦鑷冲皧鈽?,"sSecName":""},"eFashionBody":{"nId":-1,"sName":"鏃?},"eFashionFoot":{"nId":-1,"sName":"鏃?},"eFashionHead":{"nId":-1,"sName":"鏃?},"eGangqi":{"nGuanZhu":0,"nLianQi":0,"nXueJi":0,"sGuanZhu":"","sName":"鐚勾鍚夌ゥ","sSecName":""},"eHufu":{"nGuanZhu":0,"nLianQi":0,"nXueJi":0,"sGuanZhu":"","sName":"宸变亥鎶ょ","sSecName":""},"eJiezhi1":{"nGuanZhu":0,"nLianQi":0,"nXueJi":0,"sGuanZhu":"","sName":"鍏卞伐绗︾煶路鐜夎櫄","sSecName":"","vGems":[{"nGem":-1,"nHole":3},{"nGem":-1,"nHole":8},{"nGem":-1,"nHole":9}]},"eJiezhi2":{"nGuanZhu":0,"nLianQi":0,"nXueJi":0,"sGuanZhu":"","sName":"鍏卞伐琛€鐜壜风帀铏?,"sSecName":"","vGems":[{"nGem":-1,"nHole":5},{"nGem":-1,"nHole":1},{"nGem":-1,"nHole":12}]},"eJinnang":{"nGuanZhu":0,"nLianQi":0,"nXueJi":0,"sGuanZhu":"","sName":"澶╅洦閿﹀泭路鍏?,"sSecName":""},"eToukui":{"nGuanZhu":0,"nLianQi":11,"nXueJi":1,"sGuanZhu":"","sName":"鎯婂矚路涔濇棐鎮暅鍗冪啝鍐狅紙鐢凤級","sSecName":"鍧幝锋暒娌诲寲璧や粰澶╃健鍐狅紙鐢凤級"},"eWuqi":{"nGuanZhu":0,"nLianQi":11,"nXueJi":1,"sGuanZhu":"","sName":"鎵儓路淇","sSecName":""},"eXianglian":{"nGuanZhu":0,"nLianQi":0,"nXueJi":0,"sGuanZhu":"","sName":"鐓屾路鏋佹剰澶╅棶鑸嫢鐝?,"sSecName":"","vGems":[{"nGem":-1,"nHole":7},{"nGem":43939,"nHole":9},{"nGem":-1,"nHole":4}]},"eXiezi":{"nGuanZhu":0,"nLianQi":11,"nXueJi":1,"sGuanZhu":"","sName":"鎯婂矚路涔濇棐鎮暅鍗冪啝闈达紙鐢凤級","sSecName":"鍧幝锋暒娌诲寲璧や粰澶╃健闈达紙鐢凤級"},"eXishou":{"nGuanZhu":0,"nLianQi":0,"nXueJi":0,"sGuanZhu":"","sName":"涔惧潳鍗奥蜂節鏇插綊婧?,"sSecName":""},"eYifu":{"nGuanZhu":0,"nLianQi":11,"nXueJi":1,"sGuanZhu":"","sName":"鎯婂矚路涓€灏橀殣娓呭厜鏃犳瀬琚嶏紙鐢凤級","sSecName":"涔韭锋暒娌诲寲璧や粰澶╃健琚嶏紙鐢凤級"},"nChongwu":1,"nHotkey":34,"nYuanyingCol":0,"nYuanyingRow":0,"sChenghao":"澶╁湴涓嶄粊","sName":"鍑忓厤濂?,"sYuanying":"涓夎姳鑱氶紟鐢熸澧?,"sYuanyingContent":"闄勫姞鎶€鑳?鏄熻路韬鍖栬韩\n鏃犺鍑忓厤銆€銆€ 8.36%\n鑷村懡浼ゅ銆€銆€ 37.80%\n鑷村懡浼ゅ銆€銆€ 37.80%\n铏氬急鎶楁€с€€銆€ 23.40\n鍛戒腑銆€銆€銆€銆€ 35.20\n"}] I N I _ S K I L L P L A N _ L I S T V 3
最新发布
08-17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值