在矢量对矢量中找到int >>使用find_if

问题描述 投票:-1回答:1

我的数据结构是:

vector <pair <int, vector <SavingsAccount*>>> accVec;

其中int是银行帐号。

我的目标是检查用户输入的帐号是否与int向量中任何对中的任何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());

功能:

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;
}

我要求用户输入函数内的帐号,因为我找不到将accID作为参数从main()传递的方法。只要用户键入错误的帐号,我希望问题重复。

有什么建议?

c++ vector data-structures std-pair
1个回答
2
投票

使用lambda作为std::find_if()的谓词:

#include <algorithm>
#include <utility>
#include <vector>
#include <iostream>

using namespace std;

struct SavingsAccount{};

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(),
                       [=](pair<int, vector<SavingsAccount>> const &accPair) {
                           return accPair.first == accID;
                       }
        );

        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());
}
© www.soinside.com 2019 - 2024. All rights reserved.