Лучший способ удалить элементы Vec в зависимости от других элементов того же Vec
У меня есть вектор наборов, и я хочу удалить все наборы, которые являются подмножествами других наборов в векторе. Пример:
a = {0, 3, 5}
b = {0, 5}
c = {0, 2, 3}
В этом случае я хотел бы удалитьb
потому что это подмножествоa
, Я в порядке с использованием "тупой" алгоритм n².
К сожалению, довольно сложно заставить его работать с контролером заимствований. Лучшее, что я придумал, это (Детская площадка):
let mut v: Vec<HashSet<u8>> = vec![];
let mut to_delete = Vec::new();
for (i, set_a) in v.iter().enumerate().rev() {
for set_b in &v[..i] {
if set_a.is_subset(&set_b) {
to_delete.push(i);
break;
}
}
}
for i in to_delete {
v.swap_remove(i);
}
(нота: код выше не является правильным! Смотрите комментарии для более подробной информации)
Я вижу несколько недостатков:
Мне нужен дополнительный вектор с дополнительными выделениямиМожет быть, есть более эффективные способы, чем звонитьswap_remove
довольно частоЕсли мне нужно сохранить порядок, я не могу использоватьswap_remove
, но должен использоватьremove
что медленноЕсть лучший способ сделать это? Я не просто спрашиваю о моем случае использования, но об общем случае, как это описано в заголовке.