Добавьте значения к мультимножеству в boost::bimap

Я хотел использовать многокарточную версию boost::bimap, и я следую за этим,

Boost:: Bimap эквивалент двунаправленной мультикарты

Это показывает, как добавить и получить значения в структуре. Я пытаюсь найти информацию, основанную на значении справа, которое сопоставляется с несколькими значениями слева, и, если оно будет найдено, я хотел бы добавить его в список слева. Например, предположим, что это 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

Как я могу получить список справа, чтобы я мог изменить список, как упомянуто выше (вместо простого константного итератора, чтобы просто просмотреть значения).

ТИА

1 ответ

Решение

Просто... добавь это:

Жить на Колиру

#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 
Другие вопросы по тегам