Найти int в векторе вектор пар>> используя find_if - PullRequest
0 голосов
/ 26 февраля 2019

Моя структура данных:

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().Я хочу, чтобы вопрос повторялся до тех пор, пока пользователь вводит неправильный номер счета.

Есть предложения?

1 Ответ

0 голосов
/ 26 февраля 2019

Используйте лямбду в качестве предиката для 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());
}
...