C++ 通过比较字符串与对象';s变量
我有一个存储IdKaart类对象的向量C++ 通过比较字符串与对象';s变量,c++,C++,我有一个存储IdKaart类对象的向量 std::vector<IdCard *> IdCard_vect; std::vector-IdCard\u-vect; 在类别定义下面: #ifndef IDCARD_H #define IDCARD_H #include <string> #include <vector> #include <iostream> using namespace std; class Lock; class
std::vector<IdCard *> IdCard_vect;
std::vector-IdCard\u-vect;
在类别定义下面:
#ifndef IDCARD_H
#define IDCARD_H
#include <string>
#include <vector>
#include <iostream>
using namespace std;
class Lock;
class IdCard {
public:
IdCard(string, string, string);
string userId();
void giveAccess(Lock*);
void removeAccess(Lock*);
bool hasAccess(Lock*);
private:
string id;
vector<Lock*> access;
string name, adress;
};
#endif // IDCARD_H
\ifndef IDCARD\u H
#定义IDCARD\u H
#包括
#包括
#包括
使用名称空间std;
类锁;
类别识别卡{
公众:
ID卡(字符串,字符串,字符串);
字符串userId();
禁止进入(锁*);
无效删除访问(锁定*);
布尔有通道(锁*);
私人:
字符串id;
媒介访问;
字符串名称、地址;
};
#endif//IDCARD\u H
我需要能够通过比较字符串和“id”在上面的向量中找到一个对象。考虑到此id是私有的,使用成员函数“userId()”返回此字符串
找到上述对象后,我需要能够调用giveAccess(Lock*)函数。您可以使用:
或者,如果:
IdCard* result = nullptr;
for (IdCard* card : IdCard_vect)
if (card->userId() == idToFind)
result = card;
如果不能/不想使用lambdas,可以创建自定义谓词函子:
struct pointerIdCompare : public std::unary_function<IdCard*, bool>
{
pointerIdCompare(const std::string &id) : _id(id) {}
bool operator() (const IdCard* idCard)
{ return idCard->userId() == _id; }
std::string _id;
};
然后使用此迭代器调用giveAccess
:
if ( cIt != IdCard_vect.end() )
{
(*cIt)->giveAccess(...);
}
你有什么问题吗?你想用lambda/functor进行
std::find
。std::find\u如果我想起来的话。它工作得很好,谢谢!
std::vector<IdCard*>::const_iterator cIt = std::find_if(IdCard_vect.begin(), IdCard_vect.end(), pointerIdCompare("some-id"));
if ( cIt != IdCard_vect.end() )
{
(*cIt)->giveAccess(...);
}