C++ Boost库 Bimap双向映射容器
Boost库 Bimap容器
概述#
Bimap是Boost库中提供的一种双向映射(bi-directional map)数据结构。在C++标准库中,std::map
或std::unordered_map
只允许通过键来查找值,而boost::bimap
允许同时通过键和值来查找对应的元素。
特点#
- 双向映射:可以通过键来查找值,也可以通过值来查找键。
- 键和值都是唯一的:在
boost::bimap
中,每个键和每个值都必须是唯一的,就像在标准映射中键是唯一的一样。 - 多个视图:
boost::bimap
提供了多个视图,允许像操作标准映射一样操作键到值的映射(left
视图)和值到键的映射(right
视图)。
使用#
声明#
与标准的映射类似,通过尖括号指定映射键和值的类型
// 头文件 #include <boost/bimap.hpp> 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_type
或right_value_type
。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)