Удалить диапазон элементов из QHash

Я использую QHash в качестве контейнера, и у меня есть задача удалить все элементы, которые удовлетворяют предикату.
Сначала я подумал использовать Стереть-удалить идиому оказалось, что QHash не имеет возможности удалить диапазон, а только функция удалить один элемент через итератор.

std :: unordered_map (концептуально близкий к QHash Qt) имеет функция удаления диапазона.

Это подразумевает вопрос: почему QHash не имеет подобной функции и как наилучшим образом удалить элементы из QHash, удовлетворяющие предикату?

1

Решение

На основании комментариев выясняется, что идиома erase-remove не применима к контейнеру QHash.

Поэтому, учитывая описание QHash :: Стирание, в частности, что это не нарушает порядок элементов в хэше

В отличие от remove () и take (), эта функция никогда не заставляет QHash перефразировать свою внутреннюю структуру данных. Это означает, что его можно безопасно вызывать во время итерации, и это не повлияет на порядок элементов в хэше.

у нас есть следующий код для удаления элементов, которые удовлетворяют предикату:

for( auto it = hash.begin(); it != hash.end(); ++it )
{
if( pred(*it) )
{
hash.erase(it);
}
}
0

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector