2015-10-16 5 views
0

Итак, у меня есть класс, у которого есть элемент данных id, и я использую его в QList<QSharedPointer<MyClass>>, и я не уверен, как пройти проверку, чтобы проверить, существует ли в нем существующий идентификатор QList. Как бы мне это сделать, так как QList::contains потребует QSharedPointer<MyClass>&, а не MyClass*QList :: содержит с QSharedPointer

Должен ли я использовать QHash, который использует идентификатор в качестве ключа?

+0

Выбор контейнера для использования - это ваше решение. Чтобы выбрать, какой контейнер использовать, вы должны знать об сложности алгоритма для каждой операции, которую предоставляет контейнер. –

+0

Если ваше программное обеспечение работает в случае, когда вы получаете сырой MyClass *, а в другой ситуации он удерживается QSharedPointer, а не определенно, что у вас что-то не так с вашим дизайном. Идея QSharedPointer состоит в том, чтобы передать объект всегда как QSharedPointer. В противном случае может случиться, что у вас есть недопустимый указатель в вашем коде –

+0

@KamilKlimek Извините, что я имел в виду, что если бы я не использовал QSharedPointer, я бы просто написал перегрузку оператора, которая затем должна работать с 'contains' – SuperWig

ответ

1

QList::contains алгоритм основан на == operator. Как указано в документации Qt, == operator из QSharedPointer возвращает true, если значения двух управляемых необработанных указателей имеют одинаковое значение.

Кроме того, если вы были использованы сырые указатели в QList он не будет работать, потому что вы не можете перезаписать == operator необработанного указателя (у вас есть указатели на MyObject в списке не объекты так не называли перегруженный == из MyObject).

Единственное решение - вручную перебрать список и проверить равенство с помощью цикла for.

+0

По какой-то причине я предположил, что он будет вызывать правильный '==', если он содержит MyClass *. Хотя я решил, что просто закончу создание собственной проверки с помощью 'std :: find_if', если это так. Спасибо за Ваш ответ. – SuperWig

Смежные вопросы