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的特定子账户