Ну можно / «хорошо» перегрузить std::find
для пользовательских классов в объектах? И тогда без перегрузки операторы равенства. Скажем, контейнер хранит (умные) указатели на его фактические данные, я действительно не заинтересован в расположении данных или режиме хранения, я просто хочу найти определенный элемент данных ….
Законно ли это, «морально»? Если сказать, что у меня есть std::vector<std::shared_ptr<myClass> >
— или «даже» пользовательский контейнер? Или я должен всегда полагаться на std::find_if
для подобных случаев?
Идиоматическим решением было бы использовать станд :: find_if и дать ему подходящий предикат.
Это сводит к минимуму код, который вы должны написать и поддерживать, и отделяет вас от конкретного типа контейнера.
Других решений пока нет …