Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在while循环中将条目添加到std::map会覆盖最后输入的一对_C++_Stdmap - Fatal编程技术网

C++ 在while循环中将条目添加到std::map会覆盖最后输入的一对

C++ 在while循环中将条目添加到std::map会覆盖最后输入的一对,c++,stdmap,C++,Stdmap,问题是: 我在一个while循环中将条目添加到一个映射中,每次它在同一点开始时,我都会。E以前输入的条目将被取消/覆盖 守则: #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

问题是: 我在一个while循环中将条目添加到一个映射中,每次它在同一点开始时,我都会。E以前输入的条目将被取消/覆盖

守则:

#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;
        }
    }
}
#包括
#包括
int main(){
字符*键=新字符;
字符*名称,*地址;
名称=新字符[80];
地址=新字符[80];
地图地址簿;
while(true){

std::cout使用找到的insert方法。按照说明,您这样做的方式只会覆盖最后一个键。

使用找到的insert方法。按照说明,您这样做的方式只会覆盖最后一个键。

您只会在映射(指针)中存储
字符*
,而不是指针的值。同一个指针不断被反复存储,用户输入只是在更改指向的内容


你真的想得到一个<代码>:ST::/map >:St::String s,而不是<代码> char */COD> >一个经验法则,在现代C++中,你几乎不应该使用<代码>新< /C> > .< /P> < p>你只在地图(指针)中存储<代码> char */COD>,而不是指针的值。同一个指针不断被反复存储,用户输入只是在更改指向的内容


你真的想拥有一个<代码>:STD::映射<代码> STD::String S,而不是<代码> char */COD> > String,在现代C++中,你几乎不应该使用<代码>新< /C>。