首页 > 编程语言 >C++ Boost库 Bimap双向映射容器

C++ Boost库 Bimap双向映射容器

时间:2024-12-11 15:54:26浏览次数:6  
标签:侧视图 bimap 映射 boost C++ 插入 Bimap type Boost

Boost库 Bimap容器

概述

Bimap是Boost库中提供的一种双向映射(bi-directional map)数据结构。在C++标准库中,std::mapstd::unordered_map只允许通过键来查找值,而boost::bimap允许同时通过键和值来查找对应的元素。

特点

  • 双向映射:可以通过键来查找值,也可以通过值来查找键。
  • 键和值都是唯一的:在boost::bimap中,每个键和每个值都必须是唯一的,就像在标准映射中键是唯一的一样。
  • 多个视图boost::bimap提供了多个视图,允许像操作标准映射一样操作键到值的映射(left视图)和值到键的映射(right视图)。

使用

声明

与标准的映射类似,通过尖括号指定映射键和值的类型

  boost::bimap<int, std::string> bimap;

插入数据

boost::bimap插入数据要分左侧视图插入右侧视图插入

使用左侧视图插入时,与std::map类似,此时是以键到值的映射的方式插入数据的,值可以直接通过.letf.at(键)被访问到值的内容
通过左侧视图插入的数据也可以使用右侧访问,此时需要先通过.right.find(值)找到对应的迭代器,再通过->second访问对应的键

	// 通过左侧视图插入一个元素
	bimap.left.insert(std::make_pair(1, "one"));
	bimap.left.insert(boost::bimap<int, std::string>::left_value_type(2, "two"));

	// 左侧访问
	std::cout << "左侧访问 键 -> 值 :" << bimap.left.at(1) << std::endl; // one
	// 右侧访问  -- right.find获取的迭代器指向的实际上是 <"two", 2> 所以需要使用->second获取对应的键
	std::cout << "右侧访问 值 -> 键 :" << bimap.right.find("two")->second << std::endl;

使用右侧视图插入时,注意需要交换键和值的顺序,键应当在右边,通过右侧视图插入的数据,可以通过.right.at(值)访问键
左侧同理。

	// 通过右侧视图插入一个元素
	bimap.right.insert(boost::bimap<int, std::string>::right_value_type("three", 3));
	// 右侧访问
	std::cout << "右侧访问 值 -> 键 :" << bimap.right.at("three") << std::endl;
	// 左侧访问
	std::cout << "右侧访问 键 -> 值 :" << bimap.left.find(3)->second << std::endl;
  • 直接使用insert方法,这样会根据提供的pair的类型自动决定是在左侧视图还是在右侧视图插入
  bimap.insert(boost::bimap<int, std::string>::value_type(1, "one"));
  bimap.insert(std::make_pair(2, "two"));

其中boost::bimap<int, std::string>::value_type(1, "one")是bimap提供的一种构造键值对的方式,它是一种特定的类型value_type,与pair类似
注意,在使用左侧或右侧视图插入时,对应的类型value_type要修改成对应的left_value_typeright_value_type

标签:侧视图,bimap,映射,boost,C++,插入,Bimap,type,Boost
From: https://www.cnblogs.com/1873cy/p/18599369

相关文章

  • Qt/C++音视频开发 - 获取本地摄像头名称/FFmpeg命令日志方式
    Qt/C++音视频开发-获取本地摄像头名称/FFmpeg命令日志方式介绍在音视频开发中,获取本地摄像头名称和通过FFmpeg命令记录日志是两个常见的需求。Qt/C++结合使用FFmpeg库实现这些功能,可以提高开发效率并增加程序的灵活性。应用使用场景实时流媒体应用:在直播、视频会议等......
  • C++四级抽测题目(答案+题目)2
    今天我给大家出一套C++四级考题限时3小时,大家加油!!!题目1:冷饮的价格说明小明去冷饮店买冰激凌,如果买10个以上或者10个,2元/个,10个以下,2.2元/个,请从键盘读入小明的购买数量,计算小明应付的价格!输入格式一个整数,代表小明购买的冰激凌的数量(n<=100)输出格式小明应付的金......
  • C++实现维吉尼亚密码的加密和解密
    思路:将加密和解密的过程转化为ASCII编码的运算#include<iostream>usingnamespacestd;voidshowMenu(){//菜单 cout<<"------维吉尼亚密码加密解密------"<<endl; cout<<"1.加密"<<endl; cout<<"2.解密"<<endl......
  • c++ 样式错误 “Unknown property transition” /“Could not parse stylesheet of o
    解决办法通过遍历所有的控件,“Unknownpropertytransition打印出所有的控件地址,将地址GPS2>&1log.log输出到log日志中“Couldnotparsestylesheetofobject0xb88164f8”关键函数QStringgetWidgetHierarchy(QObject*widget)获得所有的控件#include<QA......
  • C++_构造函数和析构函数与对象的封装
    头文件和源文件分离源文件--类内声明和类外实现声明和实现分离struct结构的默认访问类型是public,而类为private。POD,PlainOldData只表示纯粹的数据对象classpublicprivate类作用域classscope成员变量成员函数--函数-函数头和函数体-作用域解析运算符(::......
  • 基于C和C++的高效职工管理与演讲比赛系统设计源码-Z5yUlJ9p
    基于C和C++的高效职工管理与演讲比赛系统设计源码地址本项目采用C++为主要开发语言,辅以C语言,构建了一个高效的职工管理与演讲比赛系统。项目共包含60个文件,其中包含14个头文件(.h),12个源文件(.cpp),8个日志文件(.tlog),6个文本文件(.txt),以及VisualStudio项目文件(.vcxproj,.filters,.sln)......
  • [C++11] 右值引用和移动语义
    目录左值引用和右值引用左值引用与右值引用比较​编辑右值引用使用场景和意义左值引用的使用场景:右值引用和移动语义移动拷贝移动赋值右值引用引用左值及其一些更深入的使用场景分析完美转发完美转发维持值自身属性完美转发的使用场景左值引用和右值引用什么......
  • C++游戏开发探秘【1】
    成长路上不孤单......
  • 【C++】控制台清空/清除部分字符
    目录清空整个屏幕:清空特定的某一行:(附录)一些常用的ANSI转义码清空整个屏幕:(头文件<cstdlib>)system(“cls”);*该方法容易造成闪屏等问题,可以尝试用WIN-API函数解决(?)      /待研究清空特定的某一行:若是清空方才输出的那一行     使用 \r  将......
  • C++_C++对象初始化
    类定义有两种方式:一是在类内声明时同时实现,另一种是在类内声明函数原型、在类外实现类内定义的成员函数默认为内联函数 类外实现减少编译依赖减少编译依赖并清晰地分离接口与实现初始化显式初始化和隐式初始化 声明定义初始化--初始值的......