【发布时间】:2015-03-11 09:40:07
【问题描述】:
我想知道是否有办法比较两个值以查看它们是否相等。我有一个映射,其中键是 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
}
}
}
【问题讨论】:
-
你检查过docs吗?
-
en.cppreference.com/w/cpp/container/map/find 表明 find 如果找到则将迭代器返回到找到的条目,否则返回 end()。所以你想要
if (myMap.find(number) != myMap.end()) {} -
您添加的代码没有找到任何东西。它只是遍历整个地图。您应该使用 myMap.find() 函数的结果,而不是使用 for 循环。
-
您正在将 for 循环运行到地图
myMap的大小。 if 条件为真,因为it不等于map.end并添加了金额。所以金额被添加sizeOfMap - 1次。并且声明myMap.find无效。您可以删除此语句并将获得相同的结果。检查我在答案中所做的编辑。 -
我已经检查了文档。好的,感谢您提供的新知识,如果我使用 forloop,不知道 find() 没有任何效果。我会试试你的编辑。
标签: c++ dictionary iterator comparison containers