我有这样一个bimap:
using MyBimap = boost::bimaps::bimap<
boost::bimaps::unordered_set_of<A>,
boost::bimaps::unordered_set_of<B>>;
Run Code Online (Sandbox Code Playgroud)
我想从静态初始化列表构造它,因为它可以为std::map:
MyBimap map{{a1, b1}, {a2, b2}, {a3, b3}};
Run Code Online (Sandbox Code Playgroud)
不幸的是,它不起作用,因为bimap不支持初始化列表,所以我尝试了一种解决方法.Boost的文档列出了以下构造函数:
bimap();
template< class InputIterator >
bimap(InputIterator first,InputIterator last);
bimap(const bimap &);
Run Code Online (Sandbox Code Playgroud)
所以我尝试了第二个,像这样:
std::vector<std::pair<A,B>> v{{a1, b1}, {a2, b2}, {a3, b3}};
MyBimap map(v.begin(), v.end());
Run Code Online (Sandbox Code Playgroud)
它也没用.文档并不完全清楚这个构造函数期望什么样的迭代器,但显然它不仅仅是std::pair<A, B>对象的迭代器.那么这个构造函数对这种bimap的期望是什么?
参考我之前提出的有关 boost::bimaps 和 boost 关联属性映射接口的问题,我想为我的 bimap 使用 Put 和 Get 辅助函数。
\n\n参考此处给出的示例代码,我尝试添加以下内容,但由于断言失败而出现很长的编译错误...这是代码:
\n\n#include <boost/bimap.hpp> \n#include <boost/property_map/property_map.hpp> \n#include <boost/bimap/property_map/set_support.hpp>\n#include <iostream> \n\nusing namespace boost; \n\nint main() \n{\n typedef int vertex_descriptor_t;\n typedef boost::bimaps::bimap< vertex_descriptor_t, size_t > vd_idx_bimap_t;\n typedef boost::associative_property_map<vd_idx_bimap_t::left_map> asso_vd_idx_bimap_t;\n\n // define bimap\n vd_idx_bimap_t my_bimap;\n asso_vd_idx_bimap_t my_asso_bimap(my_bimap.left);\n\n typedef typename vd_idx_bimap_t::value_type value_type; \n my_bimap.insert( value_type( 1, 100 ) );\n // print bimap\n for(auto t = my_bimap.left.begin(); t != my_bimap.left.end(); ++t)\n std::cout << t->first << " " << t->second …Run Code Online (Sandbox Code Playgroud) 我在编译boost.bimap库时遇到问题.我的测试程序是一个空白的主函数,只有一个include指令(如#include <boost/bimap.hpp>).经过一些调查后,我发现预处理器已经从头文件中做了一些有趣的构造,如:
struct A { struct B{}; struct B; };
Run Code Online (Sandbox Code Playgroud)
我不知道这是否正确,但gcc接受它,而clang和icc则不接受.谁是对的,我该怎么做才能用bimap库编译程序?不幸的是,我不能在这种情况下使用gcc.