Visual c++ 在boost::bimap中向多集添加值
我想使用boost::bimap的多映射版本,我正在关注这一点 这显示了如何在结构中添加和检索值。我试图根据右侧映射到左侧多个值的值进行查找,如果找到,我想添加到左侧的列表中。例如,假设这是bimapVisual c++ 在boost::bimap中向多集添加值,visual-c++,boost,bimap,boost-bimap,Visual C++,Boost,Bimap,Boost Bimap,我想使用boost::bimap的多映射版本,我正在关注这一点 这显示了如何在结构中添加和检索值。我试图根据右侧映射到左侧多个值的值进行查找,如果找到,我想添加到左侧的列表中。例如,假设这是bimap value_type(1, 1) value_type(10, 50) value_type(1, 2) value_type(9, 15) 当你做一个双映射时,左,相等的范围(1) 你得到 1=>1 1=>2 我想更新它,使它也映射到3,即,将3添加到列表中,以便下次当bimap.left
value_type(1, 1)
value_type(10, 50)
value_type(1, 2)
value_type(9, 15)
当你做一个双映射时,左,相等的范围(1)
你得到
1=>1
1=>2
我想更新它,使它也映射到3,即,将3添加到列表中,以便下次当bimap.left.equal_range(1)时代码>已完成,这将是结果
1=>1
1=>2
1=>3
如何获取右侧的列表,以便像上面提到的那样修改列表(而不仅仅是一个常量迭代器,以查看值)
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 << " ";
}
只是。。。加上:
#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 << " ";
}
谢谢,我的错,我没有意识到。但要移除一对,我需要一个关系,并通过它移除它?不一定。您可以通过bimap的任一视图删除:谢谢,我的错,我没有意识到。但要移除一对,我需要一个关系,并通过它移除它?不一定。您可以通过bimap的任一视图删除: