在boost :: bimap中为多集合添加值

时间:2017-02-13 16:44:59

标签: visual-c++ boost bimap boost-bimap

我想使用boost :: bimap的多图版本,我正在关注此事,

Boost::Bimap equivalent of bidirectional multimap

这显示了如何在结构中添加和检索值。我试图根据右侧的值来查找,该值映射到左侧的多个值,如果找到,我想添加到左侧的列表中。例如,假设,这是bimap,

value_type(1, 1)
value_type(10, 50) 
value_type(1, 2)
value_type(9, 15)

当你做一个bimap.left.equal_range(1);

你得到了

1=>1 1=>2

我想更新它,以便它也映射到3,即将3添加到列表中,以便下次bimap.left.equal_range(1);完成时,这将是结果,

1=>1 1=>2 1=>3

如何在右侧获取列表,以便我可以像上面提到的那样修改列表(而不仅仅是const迭代器,只是查看值)。

TIA

1 个答案:

答案 0 :(得分:0)

只需...添加:

<强> Live On Coliru

#include <iostream>
#include <boost/bimap.hpp>
#include <boost/bimap/multiset_of.hpp>
#include <boost/bimap/set_of.hpp>
#include <boost/range/iterator_range.hpp>

namespace bimaps = boost::bimaps;

int main() {
    typedef boost::bimap<bimaps::multiset_of<int>, bimaps::set_of<int>> bimap_t;

    bimap_t m;

    m.insert({1, 1});
    m.insert({10, 50});
    m.insert({1, 2});
    m.insert({9, 15});

    for (auto p : boost::make_iterator_range(m.left.equal_range(1)))
        std::cout << p.second << " ";

    std::cout << "\nafter adding:\n";

    m.insert({1, 3});

    for (auto p : boost::make_iterator_range(m.left.equal_range(1)))
        std::cout << p.second << " ";

    std::cout << "\nafter removing:\n";

    m.right.erase(m.right.find(3));

    for (auto p : boost::make_iterator_range(m.left.equal_range(1)))
        std::cout << p.second << " ";
}

打印:

1 2 
after adding:
1 2 3 
after removing:
1 2