Я закончил тем, что использовал плагин Relevanssi - https://wordpress.org/plugins/relevanssi/ и объединил его с WPadvancedsearch, он на самом деле хорошо работает вместе и позволяет мне делать все, что мне нужно.
Используйте find_if с функтором:
template <typename T>
struct pointer_values_equal
{
const T* to_find;
bool operator()(const T* other) const
{
return *to_find == *other;
}
};
// usage:
void test(const vector<A*>& va)
{
A* to_find = new A("two");
pointer_values_equal<A> eq = { to_find };
find_if(va.begin(), va.end(), eq);
// don't forget to delete A!
}
Примечание: Ваш оператор == для A должен быть константой, или, лучше все еще, записать это как не являющегося членом друга функция.
Любой станд. использования:: find_if и обеспечивают подходящий предикат самостоятельно, видят другие ответы для примера этого.
Или как альтернатива взглянули на повышение:: ptr_vector, который обеспечивает прозрачный ссылочный доступ к элементам, которые действительно хранятся как указатели (как дополнительная премия, управление памятью обрабатывается для Вас также)
Попытайтесь использовать find_if вместо этого. Это имеет параметр для предиката, где можно решить точно, как проверить, нашли ли Вы правильный элемент.
Вы могли также использовать Повышение:: Лямбда:
using namespace boost::lambda;
find_if(va.begin(), va.end(), *_1 == A("two"));
, Конечно, необходимо предпочесть использовать shared_ptrs, таким образом, Вы не должны помнить удалять!