使用 BOOST::associative property map 插入 boost::BIMAP ... 失败

2023-12-13

参考我之前提出的有关 boost::bimaps 和 boost 关联属性映射接口的问题here,我想为我的 bimap 使用 Put 和 Get 辅助函数。

参考给出的示例代码here,我尝试添加以下内容,但由于断言失败而出现很长的编译错误...这是代码:

#include <boost/bimap.hpp> 
#include <boost/property_map/property_map.hpp> 
#include <boost/bimap/property_map/set_support.hpp>
#include <iostream> 

using namespace boost; 

int main() 
{
  typedef int vertex_descriptor_t;
  typedef boost::bimaps::bimap< vertex_descriptor_t, size_t > vd_idx_bimap_t;
  typedef boost::associative_property_map<vd_idx_bimap_t::left_map>   asso_vd_idx_bimap_t;

  // define bimap
  vd_idx_bimap_t        my_bimap;
  asso_vd_idx_bimap_t   my_asso_bimap(my_bimap.left);

  typedef typename vd_idx_bimap_t::value_type value_type;    
  my_bimap.insert( value_type( 1, 100 ) );
  // print bimap
  for(auto t = my_bimap.left.begin(); t != my_bimap.left.end(); ++t)
      std::cout << t->first << " " << t->second <<  "\n";

  int z = 1;
  std::cout << "value = " << get ( my_bimap.left, z ) << std::endl;    // prints correctly value = 100


  // ERROR here . 
  boost::put( my_asso_bimap, 2, 19 );

 } 

它给出的错误为:(一个很长的列表。但我刚刚放了一个片段)

  cannot convert âboost::bimaps::detail::non_mutable_data_unique_map_view_access<Derived, Tag, BimapType>::operator[](const CompatibleKey&)::BIMAP_STATIC_ERROR__OPERATOR_BRACKET_IS_NOT_SUPPORTED360::assert_arg<long unsigned int>()â (type âmpl_::failed************ (boost::bimaps::detai

在 boost 中,还有一个错误导致文件 (property_map.hpp) 的第 364 行出现错误

  put(const put_get_helper<Reference, PropertyMap>& pa, K k, const V& v)
 {
   static_cast<const PropertyMap&>(pa)[k] = v;
  }

我理解关联地图无法改变数据的错误,因为它引用了左侧地图视图。但是如何使用 put 和 get 辅助函数?

我可以使用 GET (my_bimap.left, z ) 函数,但无法使用 PUT 函数。我想使用关联属性映射来获取和放置函数以在实际 bimap 上进行操作,这样我就不必使用 insert( value_type() )...

我希望我对我的问题足够清楚。请建议。


一般来说,您不能通过迭代器更新 bimap 条目:

在大多数情况下,迭代器不能直接修改 Bimap 中存储的关系,因为两侧都用作基于键的集合的键。当 bimap 左视图迭代器被取消引用时,返回类型与 std::pair 签名兼容。

这就是你的答案。同样,你也不能

my_bimap.left[2] = 19;

http://www.boost.org/doc/libs/release/libs/bimap/doc/html/boost_bimap/the_tutorial/differences_with_standard_maps.html#boost_bimap.the_tutorial.differences_with_standard_maps.iterator__value_type

现在,阅读更多内容使我“怀疑”以下解决方案:

typedef bm::bimap< vertex_descriptor_t, bm::list_of<size_t> > vd_idx_bimap_t;

免责声明:我不知道这会改变(?)的语义,但它至少看起来支持可写引用。下面的打印样本

1 100
value = 100
1 100
2 42

See it 住在科里鲁


完整列表

#include <boost/bimap.hpp> 
#include <boost/property_map/property_map.hpp> 
#include <boost/bimap/property_map/set_support.hpp>
#include <boost/bimap/list_of.hpp>
#include <iostream> 

using namespace boost; 

int main() 
{
    typedef int vertex_descriptor_t;
    namespace bm = boost::bimaps;
    typedef bm::bimap< vertex_descriptor_t, bm::list_of<size_t> > vd_idx_bimap_t;
    typedef boost::associative_property_map<vd_idx_bimap_t::left_map>   asso_vd_idx_bimap_t;

    // define bimap
    vd_idx_bimap_t        my_bimap;
    asso_vd_idx_bimap_t   my_asso_bimap(my_bimap.left);

    typedef typename vd_idx_bimap_t::value_type value_type;    
    my_bimap.insert( value_type( 1, 100 ) );

    // print bimap
    for(auto t = my_bimap.left.begin(); t != my_bimap.left.end(); ++t)
        std::cout << t->first << " " << t->second <<  "\n";

    int z = 1;
    std::cout << "value = " << get ( my_bimap.left, z ) << std::endl;    // prints correctly value = 100

    boost::put( my_asso_bimap, 2, 42 );

    for(auto t = my_bimap.left.begin(); t != my_bimap.left.end(); ++t)
        std::cout << t->first << " " << t->second <<  "\n";
 } 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 BOOST::associative property map 插入 boost::BIMAP ... 失败 的相关文章

  • Task.Factory.StartNew 或 Parallel.ForEach 对于许多长时间运行的任务? [复制]

    这个问题在这里已经有答案了 可能的重复 Parallel ForEach 与 Task Factory StartNew https stackoverflow com questions 5009181 parallel foreach
  • 获取 TextBox 中的文本行数

    我试图通过标签显示文本框中的文本行数 但是 问题是如果最后一行为空 标签必须显示没有空行的行号 例如 如果它们有 5 行 最后一行为空 则标签应将行数显示为 4 Thanks private void txt CurrentVinFilte
  • 读取大文件并制作字典

    我有一个大文件 我需要读取它并从中制作字典 我希望这一切能够尽可能快 然而我的Python代码太慢了 这是一个显示问题的最小示例 首先制作一些假数据 paste lt seq 20000000 lt seq 2 20000001 gt la
  • 是否有可能将 *.pdb 文件包含到发布版本中以查看错误行号?

    我做了一个项目 所有设置都是默认的 当我在调试模式 构建配置 调试 下运行它并遇到异常时 它转储到我的自定义日志记录机制 其中包含错误行号 但是当我运行发布构建时 记录相同的异常 没有行号 只有方法抛出和记录调用堆栈 是否有可能在发布配置
  • std::bind2nd 和 std::bind 与二维数组和结构数组

    我知道 C 有 lambda 并且 std bind1st std bind2nd 和 std bind 已弃用 然而 从C 的基础开始 我们可以更好地理解新特性 所以 我从这个非常简单的代码开始 使用int 数组s 第一个例子 与std
  • 如何部署包含第三方 DLL 文件的 C# 应用程序?

    首先 我对部署了解不多 我希望我的问题有意义 我需要将 C 应用程序安装 部署到多个桌面 它需要一个第三方 DLL 文件 一个 C 库 lpsolve55 dll 对于那些感兴趣的人 它是一个免费的 MIP LP 求解器 请参阅 lpsol
  • 为什么我在 WinForms 列表框中得到“System.Data.DataRowView”而不是实际值?

    每当我运行代码并尝试查看highscore我在列表框中得到的只是System Data DataRowView 谁能明白为什么吗 Code MySqlConnection myConn new MySqlConnection connStr
  • AcceptSocket 超时?

    是否有可能AcceptSocket on a TcpListener具有超时的对象 以便它偶尔被中断 TcpListener server new TcpListener localIP port server Start while sh
  • 多线程 - 比单线程慢

    当我使用多个线程而不是单线程运行程序时 它会变慢 不是应该更快吗 该程序应该遍历从起始目录开始的所有目录 并查找并打印所有名为 X 的文件 代码如下 while done pthread mutex lock lock if list is
  • 为什么 rand() 总是返回相同的值? [复制]

    这个问题在这里已经有答案了 可能的重复 在C中生成随机数 https stackoverflow com questions 3067364 generating random numbers in c 使用 rand 生成随机数 http
  • List 或其他类型上的 string.Join

    我想将整数数组或列表转换为逗号分隔的字符串 如下所示 string myFunction List
  • Code::Blocks 中的调试似乎不起作用 - 缺少调试符号

    我正在尝试在 Code Blocks 中调试程序 我跟着本指南 http wiki codeblocks org index php title Debugging with Code Blocks and 这个短视频 http www y
  • 删除数组时出现访问冲突异常

    删除分配的内存时 出现 访问冲突读取位置 异常 如下所示 我有一个针对 Visual Studio 2010 工具集 v100 C 编译器编译的本机 dll 我有一个针对它的托管 dll 包装器 它是针对工具集 v90 编译的 因为我想以
  • 文本框中“结束编辑”的事件

    我正在 winform c 中使用文本框 并使用文本在数据库中进行查询 但每次文本更改时 我都需要不断查阅文本框的文本 因此 对于这些 我使用 KeyUp 但这个活动太慢了 文本框编辑完成后是否会触发任何事件 我考虑完成2个条件 控制失去焦
  • 在 lua 中加载 C++ 模块时出现“尝试索引字符串值”错误

    我正在尝试使用 lua 用 C 编写的函数 下面给出的是cpp文件 extern C include lua h include lauxlib h include lualib h static int add 5 lua State L
  • 在两个点之间创建一条曲线,每个点都具有标准化向量

    因此 我需要一种写入方法来在两点之间创建一条曲线 每个点都有一个指向任意方向的归一化向量 我一直在尝试设计这样一种方法 但一直无法理解数学 在这里 由于一张图片胜过一千个文字 这就是我所需要的 在图中 矢量垂直于红线 我相信向量需要进行相同
  • boost::spirit::qi::语法和可变参数模板

    我在使用可变参数模板定义语法时面临一个问题 我首先定义一些包含在某些结构中的简单语法 例如纬度 经度 如下所示 include
  • 是否可以检测流是否已被客户端关闭?

    简要介绍一下情况 我有一项服务可以通过套接字接收信息并发送回复 连接不安全 我想设置另一个可以为这些连接提供 TLS 的服务 这个新服务将提供单个端口并根据提供的客户端证书分发连接 我不想使用 stunnel 有几个原因 其中之一是每个接收
  • 有没有办法在 C# 中仅通过文件名查找文件?

    我们现在使用绝对路径或相对路径在 C 应用程序中查找文件 如果文件位于当前工作目录下或 路径 之一下 有没有办法仅通过名称查找文件 使用绝对路径不好 使用相对路径也不够好 因为我们可能通过重命名或移动项目文件夹来更改项目结构 如果我们的代码
  • 查找和替换正则表达式问题

    感谢这里对我其他问题的所有大力帮助 我开始掌握正则表达式 但我仍然对这个一无所知 我的代码是 StreamReader reader new StreamReader fDialog FileName ToString string con

随机推荐

  • Android 搜索对话框的样式/主题

    tl dr 搜索对话框拾取应用程序主题中的白色文本样式 使搜索文本不可见 我正在为一个看似微不足道的问题而苦苦挣扎 我的应用程序使用深色背景 并且我使用 EEEEEE 将文本颜色调整为比标准灰色更亮 我已经实现了一个搜索对话框 Honeyc
  • Redis 主动-主动复制

    我在用redis version 2 8 3 我想建立一个redis簇 但这个簇中应该有multiple master 这意味着我需要多个对所有其他节点具有写入访问权限和应用能力的节点 我可以构建一个包含一个主服务器和多个从服务器的集群 我
  • 仅使用传递的参数子集创建一个namedtuple对象

    我使用以下方法从 MySQL 数据库中提取行作为字典 使用 SSDictCursor 并进行一些处理 from collections import namedtuple class Foo namedtuple Foo id name a
  • 是否可以在 iframe 上停止/暂停视频?

    这是视频 我想停止或暂停 可以吗 只想坚持在 iframe 上 http jsfiddle net karimkhan 2Lgxk5h3 7 js jquery 中有相同的函数吗
  • Qt的IP地址小部件,类似于MFC的IP地址控制

    我正在Qt中寻找一个类似于MFC的IP地址控制的小部件 有谁知道这样的小部件 或者我如何创建一个小部件 我不知道什么是 MFC IP Widget 但看起来它是一个输入 IP 地址的 Widget 您需要使用带有 inputMask 000
  • WPF 组合框显示成员路径

    好吧 我查看了其他问题 似乎没有得到答案 所以希望这里有人能得到答案 非常简单的问题为什么 DisplayMemberPath 属性不绑定到该项目
  • jsonp comet 挂起请求导致浏览器上丑陋的“正在加载”状态

    我正在使用 jsonp 进行跨域 comet 请求 正在加载 状态确实很烦人 有什么方法可以用javascript抑制这种情况吗 对于那些不熟悉 jsonp 的人来说 它基本上会注入一个脚本标记 但在我的情况下 我将请求挂在我的服务器上 直
  • 嵌套函数定义和范围(UnboundLocalError)[重复]

    这个问题在这里已经有答案了 为什么下面的代码无效 def foo1 x 5 def bar if x 5 x 6 print x bar 虽然此代码有效 def foo2 x 5 def bar if x 5 print ok print
  • 使用 jQuery 获取 html 元素的宽度(以百分比 % 表示)

    If I alertcss 选择器设置为的元素width 100 我明白了px 有什么方法可以让它进来吗 根据 css 设置 我需要它来修复一些具有流畅布局的脚本 css my element width 100 javascript al
  • 对指针列表进行排序时出现问题

    我正在尝试对指针列表进行排序 在我的例子中 每个指针都是 Job 类型 我的目的是按序列号对作业进行排序 void Container jobSort list
  • ionic 2 如何使用索引动态加载

    对于 ionic 1 我已经这样做了ng if index 3 0 但我需要在网格视图中动态加载数据 其中一行有两个列 我怎样才能做到这一点 我尝试了下面的代码 in my schudle ts ResourceData name ksjs
  • 比较两个二维数组并获取交集和差异

    我想比较两个数组之间整行的数据并生成 相交行的数组和 一个数组 其中第一个数组中的行在第二个数组中找不到 并且 一个数组 其中在第一个数组中找不到第二个数组中的行 我有两个多维数组 array1 sight id gt 13 locatio
  • JavaScript createElementNS 和 SVG

    我想使用 Javascript 创建内联 SVG 图形 然而 似乎createElementNS函数应用一些标准化并将所有标签转换为小写 这对于 HTML 来说很好 但对于 XML SVG 来说就不行了 我使用的NS是http www w3
  • 如何在 PHP 中传递系统命令时转义字符

    我有一个运行 PHP HTML 页面的 Linux Web 服务器 for loop instruction I m constructing the instruction here instruction lspci grep i vg
  • 如何使用 python 3.2 安装 MySQLdb

    我正在尝试使用 python 连接到 mySQL 据我了解 你需要有 MySQLdb 它是一些 python 连接器模块 我的第一个问题是没有正确版本的 mySQLdb 可以找到here 然后我应该打开一个命令行窗口并导航到我刚刚下载的文件
  • Python 子集和

    我正在尝试编写一个函数 该函数不仅可以确定集合的子集之和是否添加到所需的目标数字 而且还可以打印作为解决方案的子集 这是我用于查找子集是否存在的代码 def subsetsum array num if num 0 or num lt 1
  • 如何在 React js Web 应用程序中添加 PAYTM 网关集成?

    我从这里开始工作https github com paytm paytm pg node sdk sample blob master javascript DemoApp js我在 Express 中使用了它 它正在工作 但现在我想从反应
  • 与尺度无关的元素

    我正在开发一个 2D 计算几何库 我希望能够吐出图片来帮助调试 我想要的图元是点 线段和文本 但我事先不知道我有兴趣查看什么比例 也许只有一小部分多边形无法正常工作 所以我也需要能够缩放和平移图像 我挂了SVGPan当我在 Chrome 中
  • 如何为凸包算法的中间步骤设置动画?

    我正在尝试制作某种动画 以便用户可以理解或看到查找点集的凸包所采取的步骤 例如 假设我使用下面的代码进行 Graham Scan 有哪些方法可以对线条添加和删除进行动画处理 即使对于很多点 也需要时间来处理 然后几乎立即将它们全部绘制出来
  • 使用 BOOST::associative property map 插入 boost::BIMAP ... 失败

    参考我之前提出的有关 boost bimaps 和 boost 关联属性映射接口的问题here 我想为我的 bimap 使用 Put 和 Get 辅助函数 参考给出的示例代码here 我尝试添加以下内容 但由于断言失败而出现很长的编译错误