问题标签 [boost-bimap]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 使用 multiset_of 提升 bimap 查找
我对 Boost::bimap 有疑问,无法从 boost 文档中找到答案。
问题: withbi_map.right.find("value")
看起来只能获得迭代器{"message1", "value"}
,是否有可能获得两个匹配的列表[{"message1", "value"}, {"message2", "value"}]
?
c++ - 无法使用 Boost.Bimap 解决 g++ 7.1 结构化绑定错误
在我的项目中,我使用Boost.Bimap来实现双向映射。
看看Godbolt 上这个非常简单的 MCVE,我在其中使用结构化绑定来打印正确映射的键值对(根据文档,它与std::map
.
问题
它对于任何 g++ 版本 >= 7.4 及更高版本都可以正常编译,但是我需要使用 g++ 7.1。在这里,此代码失败并显示以下消息:
我能够发现这是由于g++ 中的一个错误,该错误似乎已在更高版本中修复。
解决方法尝试(玩具示例,成功)
为了使结构化绑定与我的编译器版本一起工作,我尝试通过专门std::tuple_size
化std::tuple_element
和std::get
. 有关更多信息,请参阅此 cppreference 链接。
为简单起见,我首先用玩具结构成功地尝试了这个。以下是专业,请查看 godbolt.org 上的完整代码:
请注意,如果您删除#ifdef
for g++ 7.1.,编译将失败并出现与上述相同的错误 ( ...is not an integral constant expression
)。(有趣:与boost::bimap
仅在 g++ 7.4 及更高版本中编译良好的示例不同,玩具示例已经在 g++ 7.2 中成功)
解决方法尝试(原始示例,不成功)
现在,非常确信我找到了解决方案,我尝试做同样的事情,boost::bimap
但我无助地失败了(在 godbolt.org 上查看):
错误消息太长,无法在此处发布(请参阅 Godbolt 输出),但基本上我知道get
编译器不匹配“my”的重载。请注意,出于调试原因,我在我的代码中插入了以下行,以确保我实际上处理的是我的专业领域中的正确类型。
难道我做错了什么?还是这个错误对我的解决方法构成了不可逾越的障碍?
boost-bimap - boost::bimap::unordered_set_of v/s std::unordered_set 的优势
我正在使用双向地图将名称列表链接到特定的单个名称(例如,关联城市和国家)。所以,我对类型的定义是这样的:
但是有一个问题让我很感兴趣:
使用boost::bimaps::unordered_set_of<std::string>
v/sa simple有什么好处std::unordered_set
?bimap 的优势很明显(避免必须手动同步两个地图),但我真的看不出给无序集的 Boost 版本带来了什么附加值,也找不到任何详细说明差异的文档。
非常感谢你的帮助。
c++ - 努力创建一个包含 std::bitset 的 Boost-Bimap
我有许多字符串及其等效的位集。我需要能够在两个方向上查找等价物,即“ str to bitset ”和“ bitset to str ”。我相信 boost-bimap 将是这项工作的正确容器。
我设法让它与字符串和整数一起使用,但我的字符串/位集 bimap 无法编译。我正在使用带有最新增强版本的 VS2019。
整数示例有效:
Bitset 示例无法编译:
bitset 示例会产生以下编译器错误:
boost_test.cpp(20): message : 请参阅正在编译的类模板实例化 'boost::bimaps::bimap' 的引用
我不知道如何解决这个问题,非常感谢任何提示。
c++ - 有没有办法强制 a (multiset_of,multiset_of) boost::bimap 是独一无二的吗?
我有一个多集 Bimap,如下所示:
element = 左键 + 右键,或者上面块中的一行
我想删除行与另一行等效的元素,例如,我想删除 6 <--> 71 中的两个。本质上,每个 bimap 元素必须是唯一的。对于我的用例,左右键必须是多组。我也想做这篇创建 bimap 的帖子。是否有一个要求每个元素都是唯一的内置函数?如果不是这种情况,有没有人知道这样做的好方法?
我使用的最小代码如下:
c++ - boost::bimap 中的移位值
我有一个像这样的无序 bimap:
这基本上是“sym”和“Press”之间的双射。我想循环“Presses”的子集,如图所示:bimap state before and after
这是使用 std::unordered_map 编译但使用 bimap 失败的算法:
基本思想是连续交换相邻的(就“syms”而言)元素。但我收到了这个错误:
所以,问题是如何交换bimap中的两个元素?.
UPD:擦除插入版本感谢 John Zwinck,它编译
boost - 无法使用 boost::bimap 编译
我很难把它变成boost::bimap
. 它不会编译:
我改变:
using MapStudentItemDesc = std::map<UINT, CString>;
至
using MapStudentItemDesc = boost::bimap<UINT, CString>;
然后我像这样声明地图:
MapStudentItemDesc mapStudentItemDescBefore;
我填写它,例如:
rMapStudentItems.insert({IDS_CMB_METHOD_BIBLE_READING, SMMETHOD3(eLanguage, IDS_CMB_METHOD_BIBLE_READING)});
我希望能够轻松地查找右侧的值,从而获得左侧的关联键。
我得到如下编译错误:
c++ - 如何测试 boost::bimap "right.find" 的结果是否被发现?
我是新手,boost::bimap
如果这听起来像一个基本问题,请原谅我。我正在使用提升 1.75.0。
拿这段代码:
它工作正常。从文档或我发现的示例中我不清楚是否可以取消right.count
调用并简单地测试这样的返回值it
:
它不喜欢它。我如何测试是否right.find
找到了结果?抱歉,如果我在文档中错过了这一点。