Есть ли способ заставить каждый элемент (multiset_of‹int›,multiset_of‹int›) boost::bimap быть уникальным?

У меня есть мультисет Bimap, который выглядит так:

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

элемент = левая клавиша + правая клавиша или строка в блоке выше

Я хотел бы удалить элементы, в которых строки эквивалентны другой строке, например, я хотел бы удалить два участка из 6 ‹--> 71. По сути, каждый элемент растрового изображения должен быть уникальным . Левая и правая клавиши должны быть мультинаборами для моего варианта использования. В этом посте я также хотел бы создать 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]});
  }


person Jordan Palmer    schedule 19.11.2019    source источник


Ответы (1)


Да. Вы можете использовать третий параметр bimap для ограничения всей коллекции.

typedef boost::bimap<boost::bimaps::multiset_of<int>,
                     boost::bimaps::multiset_of<int>,
                     boost::bimaps::set_of_relation<>
                    > 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() };
person Caleth    schedule 19.11.2019
comment
Благодарю вас! Это сделало именно то, что я хотел - person Jordan Palmer; 19.11.2019