Просто добавив точку в целом дискуссию о том, почему это предупреждение появляется (раньше мне это не было ясно). Причина, по которой это делается, как упоминалось ранее, заключается в том, что «a» в этом случае является вектором, а неравенство «a> 0» создает другой вектор TRUE и FALSE (где «a» -> 0 или нет).
Если вы хотите вместо этого проверить, есть ли какое-либо значение 'a> 0', вы можете использовать функции - «any» или «all»
Best
Используйте лямбду в качестве предиката для 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());
}