在 while 循环中向 std::map 添加一个条目会覆盖上次输入的对
Adding an entry to std::map in a while loop overwrites last entered pair
问题:我在 while 循环中向地图添加条目,每次它在同一点开始时,即先前输入的条目被忽略/覆盖。
代码:
#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 - exitn";
std::cout<<"a - add new addressn";
std::cout<<"p - print address bookn";
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;
}
}
}
设置:代码::使用 MinGW/gcc 4.7.1 的区块
您只将char *
存储在映射(指针)中,而不是指针的值。同一个指针一遍又一遍地被存储,用户输入只是在改变指向的内容。
相反,你真的想有一个std::map<std::string, std::string>
,并读std::string
s,而不是char *
s。经验法则是,在现代C++中,您几乎永远不必使用 new
.
使用在此处找到的插入方法。如前所述,您执行此操作的方式只是覆盖最后一个键。
相关文章:
- 覆盖作为另一个类的好友的虚拟受保护方法
- 如何仅覆盖一个EXPECT_CALL的默认ON_CALL操作,并在以后返回到默认操作
- 即使另一个应用具有焦点,检测F1密钥的按键(和覆盖)键
- C ++如何创建一个即使对象被覆盖也会持续存在的指针?
- 当将向量设置为一个值时,整个向量会被覆盖
- 当将多个TypedArrayContents数组加载到V8数组中时(数组数组)时,最后一个元素将覆盖所有元素
- COUT:最后一个字符串覆盖第一个字符串
- c ++ 我的 char* 数组被最后一个添加的元素覆盖
- C++将向量插入到另一个覆盖向量中
- 一个类的方法覆盖另一个类的所有方法
- 我如何确定是否在编译时覆盖了一个函数
- C/C++ - 生成一个随机字符串会覆盖以前的字符串(请参阅下面的代码)
- 我如何在抽象类中声明一个超载的运算符,并在派生的非抽象类中覆盖它
- 我应该用什么来创建一个QGraphicsView覆盖,它将QMimeData封装在Qt和C++中
- 编写一个函数,该函数将覆盖主函数数组中的值
- 我可以覆盖一个抽象基类的成员吗
- 为什么我得到 C2883:函数声明与 - 在仅覆盖基类中的一个重载时通过使用 - delcaration 引入
- c++编程:询问用户是否想要覆盖一个已经存在的文件
- 如何使我的makefile覆盖一个文件
- 光不断地覆盖一个旋转立方体的两个相同的边