将值添加到 boost::bimap 中的多重集
Add values to a multiset in a 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
只需...添加它:
#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
我想使用 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
只需...添加它:
#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