我想知道是否有办法比较两个值,看它们是否相等。我有一个地图,其中键是int,类型是一个类。我想查找一个特定的数字,看看它是否存在于地图中,是否应该完成某项操作。
I.e:我有一个银行帐户,我存储在我的地图容器中。我想更改该帐户的余额值。
我的mapdeclaration中的int是accountnumber。
map<int, class>::iterator it;
map<int, class>::myMap;
void Deposit(){
int banknbr;
int amount;
cout << "What is your acc numb?" << endl;
cin >> bankNbr;
for(it = myMap.begin(); it != myMap.end(); it++){
if(it->first==myMap[bankNbr]){
cout << "How much money do you wish to deposit?" << endl;
cin >> amount;
deposit(); // balance = balance + amount;
或类似的事情或许。如果我存储两个帐户,我会覆盖第一个帐户的余额。因此,如果第一个账户的余额为100,第二个账户为200,我想在第一个账户存入100个钱,我的价值变为300,这是不正确的。
我的代码现在是这样的:
void deposit(int number){
int amount;
for(it = myMap.begin(); it != myMap.end(); it++){
myMap.find(number);
if(it != myMap.end(){
cout << "How much money do you wish to deposit?"<<endl;
cin >> amount;
acc.deposit(amount); //acc is my own implemented class
cout << "Your balance is: " << acc.getBal(number) << endl; //get bal is return balance
}
}
}
答案 0 :(得分:2)
您可以使用find
的{{1}}方法查找密钥是否存在。
如果密钥存在,map
方法将返回迭代器,否则find
map::end
您可以在http://www.cplusplus.com/reference/map/map/find/
找到此方法的更多详细信息it=mymap.find(number);
if(it!=myMap.end()){
//your code
}
答案 1 :(得分:0)
这是你的问题:
for(it = myMap.begin(); it != myMap.end(); it++){ // it will iterate through all acounts
myMap.find(number); // find returns an iterator BUT YOU DON'T ASSIGN IT
if(it != myMap.end(){ // For each iteration this will be true, cause it is only changed in the for statement
find
是处理此问题的正确方法:
void Deposit(){
int banknbr;
cout << "What is your acc numb?" << endl;
cin >> bankNbr;
auto it = myMap.find(bankNbr);
if(it != myMap.end()){
int amount;
cout << "How much money do you wish to deposit?" << endl;
cin >> amount;
it->second.deposit(amount);
cout << "Your balance is: " << it->second.getBal() << endl; //get bal is return balance
}
}
看起来你对map
如何运作有一些误解,所以如果不清楚,请告诉我。