C ++ std :: find_if для пользовательского класса - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть std :: vector пользовательского класса (Term).Я пытаюсь найти термины в этом классе, используя конструкцию std :: find_if.Я что-то упускаю:

Term.h

 

    #ifndef _TERM_H_
    #define _TERM_H_

    #include <string>

    class Term {
        public:
                Term() {}
                Term(std::string, float);

                void setTerm(std::string myTerm) {this->term   = myTerm;}
                void setWeight(float myWeight) {this->weight = myWeight;}

                std::string getTerm() const {return this->term;}
                float getWeight() {return this->weight;}

                bool operator<(Term &t) {return t.getWeight() <  this->getWeight();}
                bool operator==(const Term *t) const {return this->getTerm().compare(t->getTerm()) == 0;}

        private:
                std::string term;
                float weight;
    }; // end class

    #endif

Затем, позже в коде, у меня есть другой класс (Document), где я буду сравниватьвекторы этих терминов: Document.cpp



    /***
     Defined in the header file:
     std::vector<Term *> terms;

     For brevity, I've removed other function definitions....***/

    void Document::compareToDoc(Document *myDoc) {
        for(auto const& term : myDoc->getTerms()) {
                //auto it = find(terms.begin(), terms.end(), term);
                auto it = find_if(terms.begin(), terms.end(),
                                  [](const Term *t1){return t1->getTerm() = term->getTerm();});

                if(it != terms.end()) {
                        std::cout << " .. found" << std::endl;
                } // end if
        } // end for
    } // compareToDoc

Я не совсем понимаю, как должно выглядеть лямбда-выражение, чтобы найти одинаковые термины.Я попробовал маршрут std :: find (закомментированный), но он никогда не находит, когда совпадают два термина.Я считаю, что find_if - правильная функция, но сейчас я борюсь с лямбдой.

Может ли кто-нибудь указать мне правильное направление?Спасибо!

1 Ответ

0 голосов
/ 26 апреля 2018

Я понял это.Строка std :: find_if должна выглядеть так:

auto it = find_if(terms.begin(), terms.end(),
                              [&term](const Term *t1){return t1->getTerm() == term->getTerm();});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...