按指定条件从C++11 map中删除元素

2023-11-16

问题

无法使用remove_if配合map容器的erase操作按指定条件从map容器删除元素。

C++11 解决方案

可以使用一下函数实现这个需求:

template<typename K, typename V>
void filterMap(map<K, V> & mapObj, bool(*pred)(const K &, const V &))
{
	for (auto it = mapObj.begin(), ite = mapObj.end(); it != ite;) {
		if (pred(it->first, it->second))
			it = mapObj.erase(it);
		else
			++it;
	}
}

示例

代码

#include <map>
#include <iostream>
#include <string>

using namespace std;

template<typename K, typename V>
void filterMap(map<K, V> & mapObj, bool(*pred)(const K &, const V &))
{
	for (auto it = mapObj.begin(), ite = mapObj.end(); it != ite;) {
		if (pred(it->first, it->second))
			it = mapObj.erase(it);
		else
			++it;
	}
}

int main()
{
	map<int, string> tmp {
		{ 2, "22" },
		{ 1, "11" },
		{ 4, "44" },
		{ 3, "33" },
	};

	const auto printMap = [& tmp]() {
		cout << "Key\tValue" << endl;
		for (const auto & it : tmp) {
			cout << it.first << "\t" << it.second << endl;
		}
	};

	cout << "Before filter\n";
	printMap();

	filterMap<int, string>(tmp, [](const int & nKey, const string & sVal) -> bool {
		return nKey % 2;
	});

	cout << "\nAfter filter\n";
	printMap();

	return 0;
}

运行结果

C++ 20解决方案

可以使用erase_if

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

按指定条件从C++11 map中删除元素 的相关文章

随机推荐

  • Token的详细说明,看这一篇就够了

    文章目录 1 基于Token 的身份验证方法 2 JWT 2 1 Header 2 2 Payload 2 3 signatrue 3 Web安全 对于 Token 在很多大型网站中都有所应用 比如 Facebook Twitter Goo
  • C#编码规范-使用StyleCop进行代码格式检查

    前言 但是在项目开发的过程中 如果只是验证命名规则 而没有统一程序排版 不同开发人员将产出不同的文件格式 这样的产出 虽然能够正常地提供项目功能 但缺会大幅降低了这份程序代码的可维护性与可读性 本篇文章介绍如何通过StyleCop这个工具
  • C++模板库STL——vector容器(下)

    上篇介绍了vector的基本使用 本贴将介绍一些常用的函数与方法 帮助各位更加灵活的使用vector容器 include
  • 2021-12-21 《聪明的投资者》学习笔记-17.四个非常有启发的案例--失败案例

    摘自 聪明的投资者 The Intelligent Investor 第4版 本杰明 格雷厄姆 第17章 四个非常有启发的案例 失败案例 宾州中央铁路公司的案例 利润不合理 财务实力欠佳 Ling Temco Vought公司 举债扩张 粗
  • 网络知识点------SBC和BSC的定义

    数通知识点学习 2021 7 1 2021 12 31号我就职于浙江大华技术股份有限公司 担任嵌入式软件工程师 2022 1 4我入职中兴通讯 担任数通工程师 从物联网行业跨到通讯行业 有遗憾 有悲伤 也有快乐 希望以后还能继续通过博客记录
  • Qt 查看Qt助手的方法

    为了方便大家自学 在这里提供一种查看Qt助手的方法 1 打开软件点击帮助 在这里可以搜索关键词 2 假设搜索的是QToolBar 3 搜索的全是英文 这时可以点击 4 此时会跳到网页版Qt助手 5 使用的是 Microsoft Edge 浏
  • centos 安装java11

    直接执行 yum list grep java 11 输出结果如下 java 11 openjdk i686 1 11 0 16 0 8 1 el7 9 updates java 11 openjdk x86 64 1 11 0 16 0
  • JavaWeb——JavaWeb核心之Servlet

    一 Servlet简介 1 什么是Servlet Servlet 运行在服务端的Java小程序 是sun公司提供一套规范 接口 用来处理客户端请求 响应给浏览器的动态资源 但servlet的实质就是java代码 通过java的API 动态的
  • Python3-定时任务的四种实现方式

    最近做一个小程序开发任务 主要负责后台部分开发 根据项目需求 需要实现三个定时任务 定时更新微信token 需要2小时更新一次 商品定时上线 定时检测后台服务是否存活 使用Python去实现这三个任务 这里需要使用定时相关知识点 Pytho
  • 如何回答「你的优势和劣势是什么」?【面试核心问题6】

    导读 优势和劣势也是面试中的常问问题 求职者应该有所准备 准备好自己的3个优势和3个劣势 对于优势来说 最好是结合职位要求 或是产品经理的基本能力 谈一些自己具备的和职位相关的优势 并且能拿出证据 经历来证明它 举例 具备良好的沟通能力和组
  • 手机应用软件卸载【adb】

    解决了想卸载 厂商又不让卸载 例 miui广告 卸载小爱等 adb 工具 点击下载 官方下载 安全 附自己的卸载包 adb exe shell pm uninstall user 0 com miui systemAdSolution ad
  • 双系统 Ubuntu grub启动项中 没有Windows的解决

    目标 从ubuntu的grub进入win10系统 实施 以下操作在Ubuntu系统中进行 终端依次执行下面命令 sudo grub install dev sda sudo chmod x etc grub d 30 os prober s
  • 导致项目失败常见的原因有哪些

    一 规划工作做得不细 或缺少灵活性 项目计划始终是项目开始前的热点讨论话题 但是在实际项目进行中仍会出现问题 因此在做好计划之后 在项目实施中项目经理还需要根据项目实际情况做适当的调整 项目经理可以通过进度猫甘特图制作项目计划 调整增加项目
  • 另类的唯品会和得物比价

    目前得物h5和小程序防爬弄得采集数据很费劲 另辟蹊径做了一款通过模拟器和商家后台方式采集数据的方式 目前实现了跟唯品会的比价 运行界面如下 输入品牌名称 点击 开始 表格中左边依次显示唯品会采集的数据 右边会根据采集模式的不同 从安卓模拟器
  • inux字符驱动之read、write部分

    本期主题 linux字符驱动之read write部分 往期链接 linux设备驱动中的并发 linux设备驱动中的编译乱序和执行乱序 linux设备驱动之内核模块 linux字符驱动 linux字符驱动之ioctl部分 linux字符驱动
  • 把手伸向大数据平台的云原生,是如何将大数据平台迁移至K8s上的?

    我们正身处数据大爆炸的时代 据IDC数据显示 仅在2022年 人类就将创造超过97ZB的数据 要知道截至2012年 人类生产的所有印刷材料的数据量为200PB 仅为2022年一年所创造数据量的50万分之一 据预测 中国数据量规模将从2022
  • TMS运输管理系统,对车辆管理、物流运输、效率提升有哪些优势?

    TMS Transport Management System 运输管理系统 其主要功能是对物流中的运输环节进行管理 此系统适用于运输公司 各企业下面的运输队等 系统对车辆 驾驶员 线路 运输方式等进行全面管理 通过系统调度管理 报表分析统
  • TypeScript学习笔记(三) - 方法

    本篇将介绍在TypeScript里如何定义和使用方法 一 方法标准声明和使用 1 方法声明 2 function func x number y number number 3 return x y 4 在TypeScript里 方法声明可
  • INSTALL_FAILED_INVALID_APK: /data/app/vmdl1735842778.tmp/11_app-debug signatures are inconsistent

    坑 背景 这两天无聊想整合一下SDK和Gradle里的东西 然后手贱 整出来一个错误 安装apk报错 INSTALL FAILED INVALID APK data app vmdl1735842778 tmp 11 app debug s
  • 按指定条件从C++11 map中删除元素

    问题 无法使用remove if配合map容器的erase操作按指定条件从map容器删除元素 C 11 解决方案 可以使用一下函数实现这个需求 template