在 while 循环中向 std::map 添加条目会覆盖最后输入的对
Adding an entry to std::map in a while loop overwrites last entered pair
问题:
我在 while 循环中向地图添加条目,每次它都从同一点开始,我。 e.之前输入的条目是 dismissed/overwritten.
代码:
#include <iostream>
#include <map>
int main(){
char* key=new char;
char *name, *address;
name=new char[80];
address=new char[80];
std::map<char*, char*> addressBook;
while(true){
std::cout<<"Please select action: \n";
std::cout<<"e - exit\n";
std::cout<<"a - add new address\n";
std::cout<<"p - print address book\n";
std::cin>>key;
switch(key[0]){
case 'a':
std::cin>>name>>address;
std::cin.clear();
std::cin.ignore(500,'\n');
addressBook[name]=address;
std::cout<<addressBook.size()<<"\n";
break;
case 'p':
for(std::map<char*,char*>::iterator it = addressBook.begin();it!=addressBook.end(); ++it)
std::cout<<it->first<<" "<<it->second<<"\n";
break;
default:
return 0;
}
}
}
设置:
Code::Blocks 与 MinGW/gcc 4.7.1
使用找到的插入方法 Here。如前所述,您这样做的方式只会覆盖最后一个密钥。
您只是将 char *
存储在地图(指针)中,而不是指针的值。同一个指针不断被反复存储,用户输入只是改变指向的内容。
您真的想要 std::map<std::string, std::string>
,而不是 std::string
,而不是 char *
。一条经验法则是,在现代 C++ 中,您几乎不必使用 new
.
问题: 我在 while 循环中向地图添加条目,每次它都从同一点开始,我。 e.之前输入的条目是 dismissed/overwritten.
代码:
#include <iostream>
#include <map>
int main(){
char* key=new char;
char *name, *address;
name=new char[80];
address=new char[80];
std::map<char*, char*> addressBook;
while(true){
std::cout<<"Please select action: \n";
std::cout<<"e - exit\n";
std::cout<<"a - add new address\n";
std::cout<<"p - print address book\n";
std::cin>>key;
switch(key[0]){
case 'a':
std::cin>>name>>address;
std::cin.clear();
std::cin.ignore(500,'\n');
addressBook[name]=address;
std::cout<<addressBook.size()<<"\n";
break;
case 'p':
for(std::map<char*,char*>::iterator it = addressBook.begin();it!=addressBook.end(); ++it)
std::cout<<it->first<<" "<<it->second<<"\n";
break;
default:
return 0;
}
}
}
设置: Code::Blocks 与 MinGW/gcc 4.7.1
使用找到的插入方法 Here。如前所述,您这样做的方式只会覆盖最后一个密钥。
您只是将 char *
存储在地图(指针)中,而不是指针的值。同一个指针不断被反复存储,用户输入只是改变指向的内容。
您真的想要 std::map<std::string, std::string>
,而不是 std::string
,而不是 char *
。一条经验法则是,在现代 C++ 中,您几乎不必使用 new
.