boost之bimaps

Boost.Bimap 是 Boost 库中的一个容器,它支持双向映射,即允许通过键查找值,也允许通过值查找键。 Boost.Bimap 的主要功能介绍如下:

  • 双向查找:与 STL 中的 map 和 multimap 不同,这两者只能进行单向映射,即通过键(key)来查找值(value)。Boost.Bimap 提供了双向查找的功能,这意味着你可以通过键找到值,也可以通过值找到对应的键。
  • 可配置性: 键、值和键值组合是否可重复都可以配置,是否有序也可以配置。
  • 实际应用:在实际的项目开发中,当需要双向查找时,使用 Boost.Bimap 会非常方便。例如,如果你有一个场景,既需要知道某个员工的 ID 对应的姓名,也需要知道某个姓名对应的 ID,那么 Boost.Bimap 就是一个非常好的选择。
  • 接口丰富:除了基本的查找功能,Boost.Bimap 还提供了一系列的接口和方法,用于操作和访问容器中的元素,如插入、删除、遍历等。
  • 性能优化:Boost.Bimap 在内部进行了优化,以确保双向查找的性能。虽然在使用时感觉像是两个独立的容器,但实际上 Boost.Bimap 在内部只维护了一个数据结构,这有助于提高查找效率。
  • 类型安全:Boost.Bimap 支持强类型,这意味着在编译时就会检查键和值的类型是否匹配,从而避免潜在的错误。
  • 易于使用:尽管 Boost.Bimap 提供了强大的功能,但它的使用方式相对简单直观。通过阅读官方文档和相关教程,开发者可以快速上手并应用到项目中。

示例代码:

#include <string>
#include <iostream>
using namespace std;#include <boost/bimap.hpp>
#include <boost/bimap/multiset_of.hpp>
#include <boost/bimap/list_of.hpp>
#include <boost/bimap/unordered_set_of.hpp>
#include <boost/bimap/vector_of.hpp>
#include <boost/bimap/support/lambda.hpp>
using map_type = boost::bimaps::bimap<boost::bimaps::multiset_of<string>, boost::bimaps::multiset_of<int>,//boost::bimaps::vector_of_relation>;//boost::bimaps::list_of_relation>;//boost::bimaps::left_based>;boost::bimaps::set_of_relation<>>;cl
using value_type = map_type::value_type;int main()
{map_type m;//list_of_relation, vector_of_relation// m.push_back(value_type("aa", 4));// m.push_back(value_type("bb", 5));// m.push_back(value_type("cc", 3));// m.push_back(value_type("dd", 1));// m.push_back(value_type("ee", 2));// m.push_back(value_type("ff", 6));// m.push_back(value_type("zz", 3));// m.push_back(value_type("aa", 6));// m.push_back(value_type("aa", 4));//set_of_relation, multiset_of_relation, unordered_set_of_relation, unordered_multiset_of_relationm.insert(value_type("aa", 4));m.insert(value_type("bb", 5));m.insert(value_type("cc", 3));m.insert(value_type("dd", 1));m.insert(value_type("ee", 2));m.insert(value_type("ff", 6));m.insert(value_type("zz", 3));m.insert(value_type("aa", 6));m.insert(value_type("aa", 4));for(auto& item : m)cout << item.left << ":" << item.right << "     " << item.right << ":" << item.left << endl;cout << "----------------" << endl;for(auto& item : m.right)cout << item.first << ":" << item.second << endl;cout << "----------------" << endl;cout << (m.left.find("cc") != m.left.end()) << endl;m.left.erase("cc");                      //删除cout << m.left.count("cc") << endl;      cout << m.size() << endl;auto it = m.left.find("aa");m.left.replace_key(it, "aa1");   //修改键it = m.left.find("aa");m.left.modify_key(it, boost::bimaps::_key="aa2"); //另一种修改键的方式m.left.modify_data(it, boost::bimaps::_data=123);   //修改值it = m.left.find("aa1");m.left.replace_data(it, 1234);                      //修改值cout << "----------------" << endl;for(auto& item : m)cout << item.left << ":" << item.right << "     " << item.right << ":" << item.left << endl;return 0;
}

输出:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/815613.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于LabVIEW的CAN通信系统开发案例

基于LabVIEW的CAN通信系统开发案例 介绍了基于LabVIEW开发的CAN通信系统&#xff0c;该系统主要用于汽车行业的数据监控与分析。通过对CAN通信协议的有效应用&#xff0c;实现了车辆控制系统的高效信息交换与实时数据处理&#xff0c;从而提升了车辆性能的检测与优化能力。 项…

点击按钮(文字)调起elementUI大图预览

时隔一年&#xff0c;我又回来了 ~ 最近在做后台&#xff0c;遇到一个需求&#xff0c;就是点击“查看详情”按钮&#xff0c;调起elementUI的大图预览功能&#xff0c;预览多张图片&#xff0c;如下图&#xff1a; 首先想到的是使用element-ui的el-image组件&#xff0c;但它是…

Elasticsearch中父子文档的关联:利用Join类型赋予文档的层级关系

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! Elasticsearch是一个强大的搜索引擎&#xff0c;它提供了丰富的功能来满足复杂的搜索需求。其中&#xff0c;父子索引类型的join功…

蓝桥杯之注意事项

1.特殊求解的地方 2.一些数学公式 比如二叉树求全深度数值那道题 3.掌握有关库函数 #include<algorithm> 包含sort&#xff08;&#xff09;函数【排列函数】C sort()排序详解-CSDN博客&#xff0c;next_permutation()函数【求解全排列问题】求解数组大小sizeof(arr…

Qt自定义标题栏【即取即用模板】

头文件 #ifndef TITLEWDG_H #define TITLEWDG_H#include <QWidget>namespace Ui { class TitleWdg; }class TitleWdg : public QWidget {Q_OBJECTpublic:explicit TitleWdg(QWidget *parent nullptr);~TitleWdg(); signals:void maximize();void minimize();void cl…

商业银行风险管理

商业银行风险管理 银行业风险类型概述管理信用风险管理利率风险缺口分析 持续期分析利率互换消除利率风险表外业务的风险管理 银行业风险类型概述 信用风险市场风险&#xff08;利率风险、汇率风险等市场价 格风险&#xff09;财务风险&#xff08;流动性风险&#xff09;操作…

【Java EE】 IoC详解(Bean的存储)

文章目录 &#x1f38d;Controller&#xff08;控制器存储&#xff09;&#x1f338;如何从Spring容器中获取对象&#xff08;ApplicationContext&#xff09;&#x1f338;获取bean对象的其他方式&#xff08;BeanFactory&#xff09;&#x1f338;Bean 命名约定&#x1f338;…

判断密码c++

题目描述 某平台对新用户注册密码做如下限制: ①长度是8到16位&#xff0c;如果不符会给出提示“password should be 8 to 16 long" ②逐一判断密码字符&#xff0c;如果是纯数字就给出提示“password should not be entirely numeric”&#xff0c;如果密码符合以上要…

支持向量机模型

通过5个条件判定一件事情是否会发生&#xff0c;5个条件对这件事情是否发生的影响力不同&#xff0c;计算每个条件对这件事情发生的影响力多大&#xff0c;写一个支持向量机模型程序,最后打印5个条件分别的影响力。 示例一 为了计算每个条件对一件事情发生的影响力&#xff0c…

Linux nfs挂载失败处理

mount.nfs: access denied by server while mounting 192.168.0.1:/home/test 其中一种可能原因是文件目录没有nfs权限&#xff0c;可以编辑/etc/exports文件添加权限后重试&#xff1a; /home/xxx *(insecure,rw,sync,no_root_squash,no_all_squash,no_subtree_check) 参考资…

6-测试内存告警

在 CentOS 8 中&#xff0c;如果你无法直接找到 epel-release 包或是遇到其他仓库配置问题&#xff0c;你可能需要使用其他方式添加EPEL仓库。由于 CentOS 8 已经达到了其生命周期的结束&#xff0c;官方仓库和EPEL仓库的管理可能会有所不同。这里有一种方法可以手动添加EPEL仓…

【笔记】EF文件中定义的SPN显示协议规则

规则配置 SPN_bit 和PLMN_bit对应EF_SPN的bit1和bit2 如EF_SPN: bit10&#xff1b;bit2 0&#xff0c; 则HOME显示SPN&#xff0c;ROAMING显示SPN-PLMN SPN_bit 2, PLMN_bit 0 显示SPN&#xff0c;不显示PLMN。 客制化通过CarrierConfig “spn_display_condition_override_…

【Spring进阶系列丨第九篇】基于XML的面向切面编程(AOP)详解

文章目录 一、基于XML的AOP1.1、打印日志案例1.1.1、beans.xml中添加aop的约束1.1.2、定义Bean 1.2、定义记录日志的类【切面】1.3、导入AOP的依赖1.4、主配置文件中配置AOP1.5、测试1.6、切入点表达式1.6.1、访问修饰符可以省略1.6.2、返回值可以使用通配符&#xff0c;表示任…

静电场中的导体与介质

静电场可能分布于填充了各种媒质的区域。虽然媒质宏观上保持电中性&#xff0c;但其内部的各种微观带电系统不可避免地会与静电场相互作用。 一般而言&#xff0c;媒质可分为三类&#xff1a;导体、介质(绝缘体)和半导体。在静电场中半导体特性与导体类似&#xff0c;因此仅就…

10. TypeScript面向对象的类(Class)

在 TypeScript 中&#xff0c;类是面向对象编程的基础&#xff0c;它们提供了一种方式来封装数据和行为。本文将详细介绍 TypeScript 中类的概念和用法。TypeScript扩展了ES的功能&#xff0c;跟JAVA关于面向对象的概念和写法很类似。 1. 类的基本概念 在 TypeScript 中&#…

964: 数细胞

样例&#xff1a; 解法&#xff1a; 1.遍历矩阵 2.判断矩阵[i][j]&#xff0c;若是未标记细胞则遍历相邻所有未标记细胞并标记&#xff0c;且计数 实现&#xff1a;遍历相邻所有未标记细胞 以DFS实现&#xff1a; function dfs(当前状态) {if (终止条件) {}vis[标记当前状…

.NET 设计模式—迭代器模式(Iterator Pattern)

简介 迭代器模式&#xff08;Iterator Pattern&#xff09;是一种行为型设计模式&#xff0c;它允许我们通过提供一种方法来访问聚合对象中的元素&#xff0c;而不需要暴露聚合对象的内部实现。在迭代器模式中&#xff0c;我们通过创建一个迭代器对象来遍历聚合对象中的元素&a…

PyQt5结合Yolo框架打包python为exe文件完整流程

一、准备 1.安装 pyinstaller pip install pyinstaller 更新&#xff08;初次安装忽略&#xff09; pip install --upgrade pyinstaller 2.安装 auto-py-to-exe 安装 pip install auto-py-to-exe 打开工具 auto-py-to-exe.exe auto-py-to-exe 可视化转换工具&#xff1…

JAVAEE之Spring AOP

1. AOP概述 AOP是Spring框架的第⼆⼤核⼼(第⼀⼤核⼼是IoC) 1.1 什么是AOP&#xff1f; • Aspect Oriented Programming&#xff08;⾯向切⾯编程&#xff09; 什么是⾯向切⾯编程呢? 切⾯就是指某⼀类特定问题, 所以AOP也可以理解为⾯向特定⽅法编程. 什么是⾯向特定⽅法编…

jenkins+docker集成harbor实现可持续集成

目录 一、前言 二、Harbor介绍 2.1 什么是Harbor 2.1.1 Harbor架构图 2.2 Harbor 特征 2.3 Harbor 核心组件 2.4 Harbor使用场景 三、Harbor部署 3.1 安装docker compose 3.1.1 安装方式一 3.2 基于python3 pip安装docker compose 3.2.1 安装python3 3.2.2 安装pyt…