0

我有一个多集 Bimap,如下所示:

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

element = 左键 + 右键,或者上面块中的一行

我想删除行与另一行等效的元素,例如,我想删除 6 <--> 71 中的两个。本质上,每个 bimap 元素必须是唯一的。对于我的用例,左右键必须是多组。我也想做这篇创建 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]});
  }

4

1 回答 1

0

是的。您可以使用的第三个参数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() };
于 2019-11-19T16:29:45.127 回答