问题标签 [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.

0 投票
1 回答
172 浏览

c++ - 使用 multiset_of 提升 bimap 查找

我对 Boost::bimap 有疑问,无法从 boost 文档中找到答案。

问题: withbi_map.right.find("value")看起来只能获得迭代器{"message1", "value"},是否有可能获得两个匹配的列表[{"message1", "value"}, {"message2", "value"}]

0 投票
1 回答
141 浏览

c++ - 无法使用 Boost.Bimap 解决 g++ 7.1 结构化绑定错误

在我的项目中,我使用Boost.Bimap来实现双向映射。

看看Godbolt 上这个非常简单的 MCVE,我在其中使用结构化绑定来打印正确映射的键值对(根据文档,它与std::map.

问题

它对于任何 g++ 版本 >= 7.4 及更高版本都可以正常编译,但是我需要使用 g++ 7.1。在这里,此代码失败并显示以下消息:

我能够发现这是由于g++ 中的一个错误,该错误似乎已在更高版本中修复。

解决方法尝试(玩具示例,成功)

为了使结构化绑定与我的编译器版本一起工作,我尝试通过专门std::tuple_sizestd::tuple_elementstd::get. 有关更多信息,请参阅此 cppreference 链接

为简单起见,我首先用玩具结构成功地尝试了这个。以下是专业,请查看 godbolt.org 上的完整代码

请注意,如果您删除#ifdeffor g++ 7.1.,编译将失败并出现与上述相同的错误 ( ...is not an integral constant expression)。(有趣:与boost::bimap仅在 g++ 7.4 及更高版本中编译良好的示例不同,玩具示例已经在 g++ 7.2 中成功)

解决方法尝试(原始示例,不成功)

现在,非常确信我找到了解决方案,我尝试做同样的事情,boost::bimap但我无助地失败了(在 godbolt.org 上查看):

错误消息太长,无法在此处发布(请参阅 Godbolt 输出),但基本上我知道get编译器不匹配“my”的重载。请注意,出于调试原因,我在我的代码中插入了以下行,以确保我实际上处理的是我的专业领域中的正确类型。

难道我做错了什么?还是这个错误对我的解决方法构成了不可逾越的障碍?

0 投票
0 回答
51 浏览

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 版本带来了什么附加值,也找不到任何详细说明差异的文档。

非常感谢你的帮助。

0 投票
1 回答
57 浏览

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' 的引用

我不知道如何解决这个问题,非常感谢任何提示。

0 投票
1 回答
48 浏览

c++ - 有没有办法强制 a (multiset_of,multiset_of) boost::bimap 是独一无二的吗?

我有一个多集 Bimap,如下所示:

element = 左键 + 右键,或者上面块中的一行

我想删除行与另一行等效的元素,例如,我想删除 6 <--> 71 中的两个。本质上,每个 bimap 元素必须是唯一的。对于我的用例,左右键必须是多组。我也想做这篇创建 bimap 的帖子。是否有一个要求每个元素都是唯一的内置函数?如果不是这种情况,有没有人知道这样做的好方法?

我使用的最小代码如下:

0 投票
1 回答
71 浏览

c++ - boost::bimap 中的移位值

我有一个像这样的无序 bimap:

这基本上是“sym”和“Press”之间的双射。我想循环“Presses”的子集,如图所示:bimap state before and after

这是使用 std::unordered_map 编译但使用 bimap 失败的算法:

基本思想是连续交换相邻的(就“syms”而言)元素。但我收到了这个错误:

所以,问题是如何交换bimap中的两个元素?.

UPD:擦除插入版本感谢 John Zwinck,它编译

0 投票
0 回答
27 浏览

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)});

我希望能够轻松地查找右侧的值,从而获得左侧的关联键。

我得到如下编译错误:

0 投票
1 回答
25 浏览

c++ - 如何测试 boost::bimap "right.find" 的结果是否被发现?

我是新手,boost::bimap如果这听起来像一个基本问题,请原谅我。我正在使用提升 1.75.0。

拿这段代码:

它工作正常。从文档或我发现的示例中我不清楚是否可以取消right.count调用并简单地测试这样的返回值it

它不喜欢它。我如何测试是否right.find找到了结果?抱歉,如果我在文档中错过了这一点。