Melhor maneira de remover elementos do Vec, dependendo de outros elementos do mesmo Vec

Eu tenho um vetor de conjuntos e quero remover todos os conjuntos que são subconjuntos de outros conjuntos no vetor. Exemplo:

a = {0, 3, 5}
b = {0, 5}
c = {0, 2, 3}

Neste caso, gostaria de removerb, porque é um subconjunto dea. Estou bem com o uso de um algoritmo "burro" n².

Infelizmente, é bastante complicado fazê-lo funcionar com o verificador de empréstimos. O melhor que eu criei é (Parque infantil):

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);
}

(Nota: o código acima não está correto! Veja os comentários para mais detalhes)

Vejo algumas desvantagens:

Preciso de um vetor adicional com alocações adicionaisTalvez haja maneiras mais eficientes do que telefonarswap_remove frequentementeSe eu precisar preservar a ordem, não posso usarswap_remove, mas tem que usarremove o que é lento

Existe uma maneira melhor de fazer isso? Não estou apenas perguntando sobre meu caso de uso, mas sobre o caso geral, conforme descrito no título.

questionAnswers(3)

yourAnswerToTheQuestion