Как использовать, находят алгоритм с вектором указателей на объекты в C++?

Я закончил тем, что использовал плагин Relevanssi - https://wordpress.org/plugins/relevanssi/ ​​ и объединил его с WPadvancedsearch, он на самом деле хорошо работает вместе и позволяет мне делать все, что мне нужно.

17
задан esrkan 3 November 2008 в 15:25
поделиться

4 ответа

Используйте 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 должен быть константой, или, лучше все еще, записать это как не являющегося членом друга функция.

17
ответ дан 30 November 2019 в 13:28
поделиться

Любой станд. использования:: find_if и обеспечивают подходящий предикат самостоятельно, видят другие ответы для примера этого.

Или как альтернатива взглянули на повышение:: ptr_vector, который обеспечивает прозрачный ссылочный доступ к элементам, которые действительно хранятся как указатели (как дополнительная премия, управление памятью обрабатывается для Вас также)

4
ответ дан 30 November 2019 в 13:28
поделиться

Попытайтесь использовать find_if вместо этого. Это имеет параметр для предиката, где можно решить точно, как проверить, нашли ли Вы правильный элемент.

http://www.sgi.com/tech/stl/find_if.html

1
ответ дан 30 November 2019 в 13:28
поделиться

Вы могли также использовать Повышение:: Лямбда:

using namespace boost::lambda;
find_if(va.begin(), va.end(), *_1 == A("two"));

, Конечно, необходимо предпочесть использовать shared_ptrs, таким образом, Вы не должны помнить удалять!

1
ответ дан 30 November 2019 в 13:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: