C++ c+中的传递值+;:当I';我回到主功能了吗?

C++ c+中的传递值+;:当I';我回到主功能了吗?,c++,stl,iterator,maps,C++,Stl,Iterator,Maps,我正在尝试打印用户从当前地图定义的人口: 我的问题是,当我将iterable返回到主函数时,为什么iterable的值会发生变化 #include <iostream> #include <string> #include <map> std::map<std::string , int> :: iterator get_population(std :: string state , std::map&l

我正在尝试打印用户从当前地图定义的人口:

我的问题是,当我将iterable返回到主函数时,为什么iterable的值会发生变化

     #include <iostream>
     #include <string>
     #include <map>

     std::map<std::string , int> :: iterator get_population(std :: string state , std::map<std::string , int> populationMap)
     {
         std::map<std::string , int> :: iterator iter;
         iter = populationMap.find(state);
         // Debug statement
         std::cout << "Population is : " << iter -> second;
         return iter;
     }
     int main()
     {
         std::map<std::string , int> populationMap;

         populationMap.insert({{"Mahrashtra" , 124945748 } , {"Uttar Pradesh" , 223897418} , {"Bihar" , 121741741} , {"West Bengal" , 91276115}});

         std::string state = "";


         std::cout << "Enter the state who's population you want to find : \n";
         std::cin >> state;

         // defining a new iterable which stores return from get_population

         std::map<std::string , int> :: iterator iter;
         iter = get_population(state ,  populationMap);


         std::cout << "The current population of " + state  + " is : ";
         std::cout << iter->second;

     }
#包括
#包括
#包括
std::map::迭代器get_填充(std::string state,std::map populationMap)
{
std::map::迭代器iter;
iter=populationMap.find(状态);
//调试语句
std::cout状态;
//定义一个新的iterable,用于存储从get_填充返回的数据
std::map::迭代器iter;
iter=获取人口(州、人口地图);

std::cout您正在通过值将映射传递给
get_population

查找发生在映射的副本上,您将向该副本返回一个迭代器(当
get\u population
返回时,该迭代器将被销毁)

将代码更改为如下所示:

std::map<std::string , int> :: iterator get_population(std :: string state , const std::map<std::string , int> & populationMap)

std::map::迭代器get_填充(std::string state,const std::map&populationMap)

您通过值传递
populationMap
,因此
get\u population
中的
iter
populationMap
的本地副本相关联,并在返回时无效。请尝试通过常量引用传递
populationMap
。我将尝试一下,谢谢!!但这样对b来说没有意义ihar right?@KhushiRajpal严格地说,由于使用了无效的迭代器,您问题中的代码表现出未定义的行为。在这种情况下,任何事情都可能发生——包括在某些情况下它似乎起作用。