Лучший способ удалить элементы 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 что медленно

Есть лучший способ сделать это? Я не просто спрашиваю о моем случае использования, но об общем случае, как это описано в заголовке.

Ответы на вопрос(3)

Ваш ответ на вопрос