Как удалить слабое значение <T>из BinaryHeap, если не удается обновить его до строгой ссылки? - PullRequest
0 голосов
/ 17 ноября 2018

Я хотел бы использовать BinaryHeap с элементами типа MyWrapperStruct(Weak<MyStruct>), где я реализую Ord для MyWrapperStruct.В этой реализации мне нужно обновить слабые ссылки, которые могут не работать.Если они терпят неудачу, я хочу, чтобы элемент был удален из кучи.

Как я могу реализовать это таким образом, чтобы не требовалось, чтобы я сначала прошел всю кучу, чтобы удалить все не обновляемые слабые ссылки?В этой куче будет большой объем данных, но только очень немногие из них станут недействительными.Ради производительности я бы хотел избежать обхода всех данных.

1 Ответ

0 голосов
/ 17 ноября 2018

Вы не можете удалить элемент, когда сравниваете что-то.

Кроме того, с моей точки зрения, реализация Ord была бы неправильной по той же причине, почему Ord не реализован для плавающего объекта.значения в Rust.Если у вас есть две не обновляемые структуры Weak, между ними нет порядка, и именно поэтому существует PartialOrd.

Если вы действительно хотите, чтобы ваш пример работал, внедрите Ord для вашегонаберите и закажите необновляемые Weak s в самом верху (например, это всегда самый большой элемент), затем используйте peek на вашем BinaryHeap, чтобы проверить, можно ли его обновить;если нет, удалите его и возьмите следующий.
Это неприятный хак, но, вероятно, ваше лучшее решение, если вы хотите, чтобы ваша вещь работала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...