【问题标题】:Add values to a multiset in a boost::bimap将值添加到 boost::bimap 中的多重集
【发布时间】:2017-02-13 16:44:58
【问题描述】:

我想使用 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

【问题讨论】:

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


    【解决方案1】:

    只需...添加它:

    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 
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多