MapValue 和迭代器 C++ 之间的比较

comparison between mapvalue and iterator c++

本文关键字:比较 之间 C++ 迭代器 MapValue      更新时间:2023-10-16

我想知道是否有办法比较两个值以查看它们是否相等。我有一个地图,其中键是 int,类型是一个类。我想找到一个特定的数字,看看它是否存在于地图中,如果它做了某个动作,应该做一些动作。

即:我有一个存储在地图容器中的银行账户。我想更改该帐户的余额值。

我的地图声明中的 int 是帐号。

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

}

您可以使用find map方法来查找密钥是否存在。

如果键存在,则 find 方法返回迭代器,否则map::end

it=mymap.find(number);
if(it!=myMap.end()){
   //your code 
}

您可以在此处找到此方法的更多详细信息 http://www.cplusplus.com/reference/map/map/find/

 //for(it = myMap.begin(); it != myMap.end(); it++){
it = myMap.find(number);   //assign "it" 
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
  }
       // }

这是你的问题:

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的工作原理有一些误解,所以如果不清楚,请告诉我。