有没有办法强制(multiset_of <int>,multiset_of <int>)boost :: bimap的每个元素都唯一?

时间:2019-11-19 15:51:19

标签: c++ boost bimap boost-bimap

我有一个多集Bimap,看起来像:

6 <--> 71
6 <--> 71
6 <--> 71
8 <--> 71
8 <--> 71
10 <--> 71
10 <--> 74

element =左键+右键,或以上代码块中的一行

我想删除这些行与另一行等效的元素,例如,我想删除6个<-> 71中的两个。基本上,每个bimap元素必须是唯一的< / strong>。对于我的用例,左右键必须是多组。 我也想做这篇创建bimap的帖子。是否有一个内置功能要求每个元素都是唯一的?如果不是这种情况,有人知道这样做的好方法吗?

我正在使用的最小代码如下:

  typedef boost::bimap<boost::bimaps::multiset_of<int>,
                       boost::bimaps::multiset_of<int>> bimap;
  bimap bm;
//fill with elements from two vectors
//vectors have the same size by definition
  for(int j = 0; j < matching1.size(); j++){
    bm.insert({matching1[j],matching2[j]});
  }

1 个答案:

答案 0 :(得分:0)

是的。您可以使用third parameter of bimap约束整个集合。

typedef boost::bimap<boost::bimaps::multiset_of<int>,
                     boost::bimaps::multiset_of<int>,
                     boost::bimaps::set_of_relation<>
                    > bimap;

如果要首先构造具有重复对的双图,请使用原始定义。您可以从第一个Bimap初始化第二个Bimap,例如

typedef boost::bimap<boost::bimaps::multiset_of<int>,
                     boost::bimaps::multiset_of<int>
                    > bimap;

typedef boost::bimap<boost::bimaps::multiset_of<int>,
                     boost::bimaps::multiset_of<int>,
                     boost::bimaps::set_of_relation<>
                    > unique_bimap;

bimap data = { ... };
unique_bimap uniqued_data { data.begin(), data.end() };