在提升::bimap中移位值
Shift values in boost::bimap
本文关键字:bimap 更新时间:2023-10-16
我有一个这样的无序双映射:
using SymPressMap =
boost::bimap<boost::bimaps::unordered_set_of<sym>,
boost::bimaps::unordered_set_of<Press>>;
这基本上是"sym"和"Press"之间的双射。我想循环"按"的子集,如图片所示:bimap 状态前后
以下是使用 std::unordered_map 编译但使用 bimap 失败的算法:
void Layout::cycle(SymVector syms) {
assert(syms.size() >= 2);
for (auto it = syms.rbegin(); it != syms.rend() - 1; it++) {
std::swap(sympressmap.left.at(*it), sympressmap.left.at(*(it + 1)));
}
}
基本思想是连续交换相邻的(就"符号"(元素。但是我收到此错误:
Error C2678 binary '=': no operator found which takes a left-hand operand of type '_Ty' (or there is no acceptable conversion)
KeyboardOptimizer c:program files (x86)microsoft visual studio2017professionalvctoolsmsvc14.16.27023includeutility 68
所以,问题是如何交换bimap中的两个元素?
UPD:擦除插入版本,感谢John Zwinck,它编译
void Layout::cycle(SymVector syms) {
assert(syms.size() >= 2);
Press plast = pressmap.left.at(*syms.rbegin());
pressmap.left.erase(*syms.rbegin());
for (auto it = syms.rbegin() + 1; it != syms.rend(); it++) {
auto p = pressmap.left.at(*it);
pressmap.left.erase(*it);
pressmap.left.insert(SymPressMap::left_value_type(*(it - 1), p));
}
pressmap.left.insert(SymPressMap::left_value_type(*syms.begin(), plast));
}
对于常规unordered_map,交换mapped_type
值没有问题,因为容器结构不依赖于它们。 但是修改key_type
键是一个常见的困难和混乱领域,因为键定义了容器的结构(哪些值在哪些存储桶中(。
您在这里遇到同样的问题,即您正在尝试修改存储在容器中的键(您是在交换值方面执行此操作的,但在 bimap 中,键和值当然是对偶的(。 你不能这么做。 您可以做的是复制键值对,交换其值,从容器中删除原始文件,然后插入修改后的键值对。
参考:如何在unordered_map中更改密钥?
相关文章:
- 如何在c++中只将键插入到bimap的一侧
- 在提升::bimap中移位值
- C++视图的一侧与视图值的另一侧具有不同的键时,bimap 是否可能?怎么做?
- 是否可以覆盖 "find" 和 "erase" boost::bimaps::bimap.left 的方法?怎么办?
- 是boost :: bimap超杀击功能
- C boost :: bimap insert()方法不起作用
- 螺纹将其插入BIMAP
- 将 bimap 写入二进制文件,然后读取它
- 编译时 Bimap static_assert失败
- 在bimap中找到重复元素的所有键
- 访问bimap中具有键的值
- 将 boost::d ynamic_bitset<> 插入 boost::bimap
- Boost Bimap 在调试版本中占用太多内存
- 提升:使用运算符 [] 访问 bimap
- 如何使引用变量提升::bimap.left
- 为什么一个简单的bimap(std::string <-> int)不起作用?
- 使用boost::关联属性映射插入boost::BIMAP..失败
- 使用 boost::asociative 属性映射和 boost::BIMAP 接口
- 如何在使用 Boost.bimap 时避免密钥复制
- 使用unordered_set_of和自定义类型提升 BIMAP