[英]C++ std::find_if on a custom class
我有一个自定义类(术语)的std :: vector。 我正在尝试使用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
我对lambda表达式查找相同的术语应该感到困惑。 我尝试了std :: find路线(注释掉),但是当两个条件匹配时却找不到。 我相信find_if是正确的函数,但是我现在在lambda方面挣扎。
谁能指出我正确的方向? 谢谢!
我想到了。 std :: find_if行必须如下所示:
auto it = find_if(terms.begin(), terms.end(),
[&term](const Term *t1){return t1->getTerm() == term->getTerm();});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.