C ++ STL - зачем использовать! (W <* i), а не (w == * i) - PullRequest
4 голосов
/ 29 апреля 2011
vector<Widget> vw;
// populate vw
sort(vw.begin(), vw.end());
Widget w;

vector<Widget>::iterator i = lower_bound(vw.begin(), vw.end(), w);

if ( (i != vw.end()) && !(w < *i) ) // Yes, it is correct!
    // found w in vw

Вот мое понимание:

Возвращаемое значение * i от lower_bound всегда НЕ меньше значения w . Другими словами, w <= *i

Вот вопрос, почему бы не использовать непосредственно следующее условие для проверки?

if ( (i != vw.end()) && (w == *i) ) // why not use (w == *i)?
    // found w in vw

спасибо

1 Ответ

8 голосов
/ 29 апреля 2011

Поскольку неявный интерфейс <algorithm> использует для сортировки, и для такого рода вещей требуется только определение оператора < для типа данных.Если бы они использовали ==, они заставили бы разработчиков также реализовать его на пользовательских типах, чтобы воспользоваться этими функциями.

Другими словами, если вы создаете сортируемый тип Foo, чтобы использовать функции, определенные в<algorithm>, вам нужно только перегрузить оператор <.

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