C STD :: find_if在自定义类上

C++ std::find_if on a custom class

本文关键字:自定义 STD find if      更新时间:2023-10-16

我有一个自定义类(term(的std ::向量。我正在尝试使用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.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

我对lambda表达方式的样子感到非常困惑,以找到相同的术语。我尝试了STD ::查找路线(已评论(,但是何时匹配两个术语。我相信find_if是正确的功能,但我现在正在与lambda挣扎。

有人可以指向正确的方向吗?谢谢!

我弄清楚了。std :: find_if线必须看起来像这样:

auto it = find_if(terms.begin(), terms.end(),
                              [&term](const Term *t1){return t1->getTerm() == term->getTerm();});