[英]How to search a list element, STL C++
我的代码存在问题。 我有一个名为CPerson的班级。
class CPerson {
private:
string name;
string lastName;
int age;
char *pPesel;
public:
CPerson( string i, string n, int w, char *pPes);
...
};
我有一份清单。
list <CPerson> lst;
list <CPerson> ::iterator it;
it = lst.begin();
CPerson wzor1("John", "Steward", 22, "2323" );
当我填满它时,我想找到一个其lastName
字段开始的CPerson实例,例如“Kow”。
有可能将“Kow”作为任何函数的参数吗?
我尝试使用find
或find_if
但它从未起作用,不知道如何编写谓词,任何想法?
谓词就像是在迭代容器时对每个元素的回调函数。
bool VerifyLastName( CPerson& obj )
{
return (obj.getLastName() == "Kow");
}
std::list<CPerson>::iterator it = std::find_if(lst.begin(), lst.end(), VerifyLastName);
如果it
不等于lst.end()
,则迭代器指向具有姓氏为“Kow”的成员的对象。
//Create a member function getLastName in your class
std::string CPerson::getLastName( void ){
return lastname;
}
//Create a function object for find_if use.
struct checkLastName{
checkLastName(const std::string & test):checkName(test){}
bool operator()( CPerson& ob ){
return ob.getLastName().substr(0, checkName.size()).compare(checkName);
}
std::string checkName;
};
std::string lname;
cin>>lname; //"Kow"
//Use std::find_if
std::list<CPerson>::iterator it =
std::find_if(lst.begin(),
lst.end(), checkLastName(lname));
if(it!=lst.end())
std::cout<<" Found ";
使用C ++ 11,您可以使用lambda函数:
std::list<CPerson>::iterator it =
std::find_if(lst.begin(),
lst.end(),
[lname](CPerson const& ob){
return ob.getLastName().substr(0, lname.size()).compare(lname);
}));
find_if的简单使用在http://www.cplusplus.com/reference/algorithm/find_if/中显示,带有一个简单的谓词函数(IsOdd)。 要添加参数,最好在二进制函数http://www.cplusplus.com/reference/functional/bind1st/上使用函数对象(仿函数)或bind1st。
如果您使用的是C ++ 11,则可以使用lambda / anonymous函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.