原因:本来想直接通过插入更新同一key对应的value发现覆盖不了。

实现:

#include <stdio.h>
#include <string.h>
#include <pthread.h>
#include <unistd.h>
#include <map>using namespace std;static pthread_mutex_t  mtxBckLoadProgress = PTHREAD_MUTEX_INITIALIZER;typedef std::map<int,float> mapBackupprogress;   //存放备份进度消息
mapBackupprogress rdMapbckupProgress;void AddrecordBckProgress(int backupid, float progress)
{pthread_mutex_lock(&mtxBckLoadProgress);printf("backupid: %d, progress: %f.\n",backupid ,progress);map< int ,float >::iterator it = rdMapbckupProgress.find( backupid );if (it != rdMapbckupProgress.end()){/*,如果map里面插入之前的<key, value>,如果key在map里面有的话,不会覆盖之前的value,一般先判断之前有没有数据,有的话先删除,然后再去添加*/rdMapbckupProgress.erase(it);rdMapbckupProgress.insert(std::make_pair( backupid, progress));printf("[AddrecordBckProgress]:Already Find backupid: %d progress:%f update from map.\n",backupid,progress);}else{rdMapbckupProgress.insert(std::make_pair( backupid, progress));//如果map不存在插入新的printf( "[AddrecordBckProgress]:instert new bckupProgress backupid: %d, progress: %f.\n", it->first, it->second);}it = rdMapbckupProgress.begin();for(;it != rdMapbckupProgress.end();it++){printf("[AddrecordBckProgress]:finally bckupProgress!!! backupid: %d, progress: %f.\n", it->first, it->second);}pthread_mutex_unlock(&mtxBckLoadProgress);return ;
}int recordGetBackuploadprogress(int inkey)
{int ret = -1;//Json::Value root;//AutoMutexLck lck(&mtxBckLoadProgress); // 如不是嵌套锁,请注意锁死问题pthread_mutex_lock(&mtxBckLoadProgress);map< int ,float >::iterator it = rdMapbckupProgress.find( inkey );if (it != rdMapbckupProgress.end()){//root["backupid"]       = it->first;//root["progress"]       = it->second;//result = root.toStyledString().c_str();printf( "[recordGetBackuploadprogress]:recordGetBackuploadprogress backupid: %d, progress: %f.\n", it->first, it->second);ret = 0;}else{printf("[recordGetBackuploadprogress]:Find backupid: %d progress fialed from map.\n",inkey);}pthread_mutex_unlock(&mtxBckLoadProgress);return ret;
}int main()
{float count = 1.03;while(1){AddrecordBckProgress(1,count);count++;sleep(1);if(count >= 10)break;}recordGetBackuploadprogress(1);printf("main exit....\n");return 0;
}

运行结果

huqin@ubuntu:~/Demo$ g++ map.cpp -o map
huqin@ubuntu:~/Demo$ ./map
backupid: 1, progress: 1.030000.
[AddrecordBckProgress]:instert new bckupProgress backupid: 1, progress: 0.000000.
[AddrecordBckProgress]:finally bckupProgress!!! backupid: 1, progress: 1.030000.
backupid: 1, progress: 2.030000.
[AddrecordBckProgress]:Already Find backupid: 1 progress:2.030000 update from map.
[AddrecordBckProgress]:finally bckupProgress!!! backupid: 1, progress: 2.030000.
backupid: 1, progress: 3.030000.
[AddrecordBckProgress]:Already Find backupid: 1 progress:3.030000 update from map.
[AddrecordBckProgress]:finally bckupProgress!!! backupid: 1, progress: 3.030000.
backupid: 1, progress: 4.030000.
[AddrecordBckProgress]:Already Find backupid: 1 progress:4.030000 update from map.
[AddrecordBckProgress]:finally bckupProgress!!! backupid: 1, progress: 4.030000.
backupid: 1, progress: 5.030000.
[AddrecordBckProgress]:Already Find backupid: 1 progress:5.030000 update from map.
[AddrecordBckProgress]:finally bckupProgress!!! backupid: 1, progress: 5.030000.
backupid: 1, progress: 6.030000.
[AddrecordBckProgress]:Already Find backupid: 1 progress:6.030000 update from map.
[AddrecordBckProgress]:finally bckupProgress!!! backupid: 1, progress: 6.030000.
backupid: 1, progress: 7.030000.
[AddrecordBckProgress]:Already Find backupid: 1 progress:7.030000 update from map.
[AddrecordBckProgress]:finally bckupProgress!!! backupid: 1, progress: 7.030000.
backupid: 1, progress: 8.030000.
[AddrecordBckProgress]:Already Find backupid: 1 progress:8.030000 update from map.
[AddrecordBckProgress]:finally bckupProgress!!! backupid: 1, progress: 8.030000.
backupid: 1, progress: 9.030000.
[AddrecordBckProgress]:Already Find backupid: 1 progress:9.030000 update from map.
[AddrecordBckProgress]:finally bckupProgress!!! backupid: 1, progress: 9.030000.
[recordGetBackuploadprogress]:recordGetBackuploadprogress backupid: 1, progress: 9.030000.
main exit....

更新map中已存在的value值相关推荐

  1. java从map取值_java map中怎么通过键取出值?

    展开全部 在java map中取出键值有以32313133353236313431303231363533e59b9ee7ad9431333363396464下两种方法: 1.第一种方法根据键值的名字 ...

  2. C++ map中使用pair构造键值对小记

    源码 #include <iostream> #include <memory> #include <map> #include <string> #i ...

  3. java各map中存放null值

    java中各map中是否可以存储null值情况

  4. map中的散碎知识点

    问题:使用map统计一个字符串中的每个字符出现的次数 #include<iostream> #include<map> #include<string> using ...

  5. 判断 Map 中是否包含指定的 key 和 value

    重写name的hashcode()和equals()方法 package com.imooc.collection;import java.util.HashSet; import java.util ...

  6. python中关系运算符惰性求值,lazy.js 惰性求值实现分析

    背景:惰性求值? 来看一个 lazy.js 主页提供的示例: var people = getBigArrayOfPeople(); var results = _.chain(people) .pl ...

  7. SQL UPDATE 语句(更新表中的记录)

    SQL UPDATE 语句 UPDATE 语句用于更新表中已存在的记录. 还可以使用AND或OR运算符组合多个条件. SQL UPDATE 语法 具有WHERE子句的UPDATE查询的基本语法如下所示 ...

  8. pandas基于条件判断更新dataframe中所有数据列数值内容的值(Conditionally updating all values in pandas Dataframe )

    pandas基于条件判断更新dataframe中所有数据列数值内容的值(Conditionally updating all values in pandas Dataframe ) 目录

  9. pandas基于条件判断更新dataframe中特定数据列数值内容的值(Conditionally updating values in specific pandas Dataframe )

    pandas基于条件判断更新dataframe中特定数据列数值内容的值(Conditionally updating values in specific pandas Dataframe ) 目录

最新文章

  1. MySql层级树查询
  2. 切图工具优化的几点总结
  3. BZOJ1085: [SCOI2005]骑士精神
  4. AINLP-Archive:AINLP文章存档计划
  5. Jsoup消除不受信任的HTML(用于防止XSS的攻击)
  6. 使用Python标准库函数os.listdir()时的4个注意事项
  7. 麒麟9000芯片的库存真就是个迷
  8. netty mysql 中间件_阿里开源Mysql分布式中间件:Cobar
  9. Dos系统功能调用表9号功能
  10. Android App安全防范措施的小结
  11. Masm(1):资源文件定义
  12. 【NDK】Android NDK下载安装教程
  13. PB12下geturl获取汉字乱码的解决
  14. 通过spi调试linux应用程序,654123??SPI linux 驱动调试感悟
  15. opencv+paddle orc 识别图片提取表格信息
  16. android 代码 lut,Android基于Shader的图像处理(7)-颜色表LUT
  17. 弧齿锥齿轮零件图_弧齿锥齿轮画法类别
  18. 实现仿若依后台管理主要功能
  19. Django实现短信注册功能
  20. 使用endnote来查找目标期刊

热门文章

  1. 《鸟哥的Linux私房菜》学习笔记
  2. matlab函数——meshgrid、mesh、surf函数
  3. 【C语言】用代码实现九九乘法口诀表
  4. Ubuntu16安装docker
  5. 工业机器人调运角度_FANUC/发那科搬运工业机器人R-2000iC/125L 负载125KG 臂展3100m...
  6. 【Deep Learning学习笔记】Deep learning for nlp without magic_Bengio_ppt_acl2012
  7. vue路由传参,对参数值编码处理
  8. bug的生命周期你知道吗?一张图带你看懂它!
  9. 计算机信息处理员证书可以在东莞入户,东莞入户办理:人才入户东莞有哪些职称考?可靠吗?...
  10. 蓝牙 WBS 宽带通话 (wide band speech) 剖析(二) -- BCCMD control chip