Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 通过比较字符串与对象';s变量_C++ - Fatal编程技术网

C++ 通过比较字符串与对象';s变量

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

我有一个存储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 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(...);
}