我有一个像这样的bimap:

using MyBimap = boost::bimaps::bimap<
    boost::bimaps::unordered_set_of<A>,
    boost::bimaps::unordered_set_of<B>>;

我想从静态初始值设定项列表构造它,因为可以对std::map完成它:
MyBimap map{{a1, b1}, {a2, b2}, {a3, b3}};

不幸的是,它不起作用,因为bimap不支持初始化列表,因此我尝试了一种解决方法。 Boost的文档列出了以下构造函数:
 bimap();

 template< class InputIterator >
 bimap(InputIterator first,InputIterator last);

 bimap(const bimap &);

所以我尝试了第二个,像这样:
std::vector<std::pair<A,B>> v{{a1, b1}, {a2, b2}, {a3, b3}};
MyBimap map(v.begin(), v.end());

它也没有用。文档尚不清楚该构造函数需要什么样的迭代器,但是显然,这不仅仅是std::pair<A, B>对象的迭代器。那么,此构造函数对这种bimap有什么期望?

最佳答案

迭代器的begin/end应该用于一系列bimap值。
boost::bimap< A, B>::value_type
bimap值非常类似于std::pair,并且可以使用{a1, b1}语法进行初始化。它们的 vector 似乎也可以工作,它为构造函数提供了可用的迭代器。

好的,这是一个为我编译并运行的示例(gcc 4.8.2 --std = c++ 11)

#include <vector>
#include <boost/bimap.hpp>

using namespace std;
int main() {
    typedef boost::bimap< int, int > MyBimap;

    std::vector<MyBimap::value_type > v{{1, 2}, {3, 4}, {5, 6}};

    MyBimap M(v.begin(),v.end());

    std::cout << "The size is " << M.size()
              << std::endl;

    std::cout << "An entry is 1:" << M.left.at(1)
              << std::endl;
}

关于c++ - 如何从静态列表构建Boost bimap?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20288871/

10-13 06:11