Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.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++ 使用Find_if在向量对向量中查找int_C++_Vector_Data Structures_Std Pair - Fatal编程技术网

C++ 使用Find_if在向量对向量中查找int

C++ 使用Find_if在向量对向量中查找int,c++,vector,data-structures,std-pair,C++,Vector,Data Structures,Std Pair,我的数据结构是: vector <pair <int, vector <SavingsAccount*>>> accVec; do { iter = find_if (accVec.begin(), accVec.end(), findAccID); if (iter == accVec.end()) { cout << endl << "ERROR: Account Does Not Exist.

我的数据结构是:

vector <pair <int, vector <SavingsAccount*>>> accVec;
do {
    iter = find_if (accVec.begin(), accVec.end(), findAccID);

    if (iter == accVec.end()) {
        cout << endl << "ERROR: Account Does Not Exist. Try Again." << endl;
    }
} while (iter == accVec.end());
功能:

do {
    iter = find_if (accVec.begin(), accVec.end(), findAccID);

    if (iter == accVec.end()) {
        cout << endl << "ERROR: Account Does Not Exist. Try Again." << endl;
    }
} while (iter == accVec.end());
bool findAccID(pair <int, vector <SavingsAccount*>> accPair) {
    static int i = 0, accID;

    if (i == 0) {
        cout << endl << "Enter The Account Number In Which You Want To Deposit: ";
        cin >> accID;
        i++;
    }

    if (accID == accPair.first) {
        return true;
    }
    return false;
}
我向用户询问函数中的帐号,因为我找不到从main传递accID作为参数的方法。我想重复这个问题,只要用户输入了错误的帐号

do {
    iter = find_if (accVec.begin(), accVec.end(), findAccID);

    if (iter == accVec.end()) {
        cout << endl << "ERROR: Account Does Not Exist. Try Again." << endl;
    }
} while (iter == accVec.end());

有什么建议吗?

使用lambda作为std::find\u的谓词,如果:

do {
    iter = find_if (accVec.begin(), accVec.end(), findAccID);

    if (iter == accVec.end()) {
        cout << endl << "ERROR: Account Does Not Exist. Try Again." << endl;
    }
} while (iter == accVec.end());
或函子:

do {
    iter = find_if (accVec.begin(), accVec.end(), findAccID);

    if (iter == accVec.end()) {
        cout << endl << "ERROR: Account Does Not Exist. Try Again." << endl;
    }
} while (iter == accVec.end());
#include <algorithm>
#include <utility>
#include <vector>
#include <iostream>

using namespace std;

struct SavingsAccount{};

class AccountFinder
{
    int accID;

public:
    AccountFinder(int accID) : accID{ accID } {};

    bool operator()(pair<int, vector<SavingsAccount>> const &accPair)
    {
        return accPair.first == accID;
    }
};

int main()
{
    vector<pair<int, vector<SavingsAccount>>> accVec;
    vector<pair<int, vector<SavingsAccount>>>::iterator iter;

    do {
        cout << "Enter The Account Number In Which You Want To Deposit: ";
        int accID;
        cin >> accID;

        iter = find_if(accVec.begin(), accVec.end(), AccountFinder(accID));

        if (iter == accVec.end()) {
            cout << endl << "ERROR: Account Does Not Exist. Try Again." << endl;
        }
    } while (iter == accVec.end());
}

最好的建议是阅读C++书中的一章,它展示了使用STD::FANDIFIF的LAMBDA和标准库算法的一般性描述。所示代码以根本错误的方式使用了comparator参数。您不应该在比较器中提示用户输入!首先提示输入,然后调用find_(如果),然后根据结果判断输入是否有效。为什么向量中的原始指针指向SavingsAccount而不是实际对象?还有,为什么有多个帐户使用相同的ID?@Swardfish银行客户可能有一个主帐户ID,其中包含多个子帐户储蓄、支票、贷款、,etc@RemyLebeau这些子帐户的子帐户ID与帐户ID一起标识它们?那个子帐户ID是什么?可以在向量中找到的索引?如果子帐户被删除怎么办?ID索引较高的所有子帐户是否更改其ID?不,这种设计是有缺陷的。是的,这只是一个类分配,用户可以有他想要的任何子储蓄帐户。子账户id是索引,但就分配而言,不应该有删除子账户的选项,而是将更多资金存入特定账户/账户id的特定子账户