C++ 返回包含std::map的std::unique\u ptr

C++ 返回包含std::map的std::unique\u ptr,c++,stdmap,unique-ptr,C++,Stdmap,Unique Ptr,我有一张地图,如下所示: std::map<char,std::map<short,char>> my_maps; std::map my\u map; 我需要从一个函数返回一个对应于指定键的映射的引用。 我不知道该怎么做,以下是我的代码: bool GetMap(char key,std::unique_ptr<std::map<short,char>> my_map){ auto m=my_maps.find(key); if(

我有一张地图,如下所示:

std::map<char,std::map<short,char>> my_maps;
std::map my\u map;
我需要从一个函数返回一个对应于指定键的映射的引用。 我不知道该怎么做,以下是我的代码:

bool GetMap(char key,std::unique_ptr<std::map<short,char>> my_map){


  auto m=my_maps.find(key);
  if(m!=my_maps.end()){

     my_map=m->second;
     // I have also tried this: my_map=my_maps[_commandcode];

    return(true);
  }
  return (false);
}
bool GetMap(字符键,std::unique\u ptr my\u map){
自动m=我的地图。查找(键);
if(m!=my_maps.end()){
我的地图=米->秒;
//我也试过这样做:my_map=my_map[_commandcode];
返回(真);
}
返回(假);
}

这是我将要做的:

std::map<short,char>& GetMap(char key, std::map<char,std::map<short,char>> &my_maps)
{
  auto m = my_maps.find(key);
  if (m != my_maps.end())
  {
    return m->second;
  }
  throw std::exception("not found");
}
std::map和GetMap(char键、std::map和myu映射)
{
自动m=我的地图。查找(键);
if(m!=my_maps.end())
{
返回m->s;
}
抛出std::异常(“未找到”);
}

这是我将要做的:

std::map<short,char>& GetMap(char key, std::map<char,std::map<short,char>> &my_maps)
{
  auto m = my_maps.find(key);
  if (m != my_maps.end())
  {
    return m->second;
  }
  throw std::exception("not found");
}
std::map和GetMap(char键、std::map和myu映射)
{
自动m=我的地图。查找(键);
if(m!=my_maps.end())
{
返回m->s;
}
抛出std::异常(“未找到”);
}

您不应该返回
唯一\u ptr
(这没有意义);您可能应该返回一个迭代器。否则我如何返回指向此映射的指针?!指针?这不就是第二次吗?你到底想达到什么目的?如果您提到您正在尝试做的事情,我们可能会提供更好的解决方案。:)把地图作为参考传递?无论如何都应该这样做,否则会有复制日志。接受
std::unique_ptr
意味着调用方传递的
map
将从调用方的作用域中获取,并在函数返回时销毁。“
unique
”表示它是“拥有”指针,
map
对象没有它就无法存在。这可能不是你想要的。传递引用。您不应该返回
唯一的\u ptr
(这没有意义);您可能应该返回一个迭代器。否则我如何返回指向此映射的指针?!指针?这不就是第二次吗?你到底想达到什么目的?如果您提到您正在尝试做的事情,我们可能会提供更好的解决方案。:)把地图作为参考传递?无论如何都应该这样做,否则会有复制日志。接受
std::unique_ptr
意味着调用方传递的
map
将从调用方的作用域中获取,并在函数返回时销毁。“
unique
”表示它是“拥有”指针,
map
对象没有它就无法存在。这可能不是你想要的。传递引用。这很好,但我需要返回一个指针,而不是map@Shohreh因为?这将返回一个引用,这意味着其地址是指定映射的地址。如果你需要一个指针,请根据来电者的大小选择地址,但老实说,我看不出你需要它做什么。我无耻地从@Mehrdad那里窃取了这个想法,并添加了例外。这很好,但我需要返回一个指针,而不是一份map@Shohreh因为?这将返回一个引用,这意味着其地址是指定映射的地址。如果你需要一个指针,把地址记在呼叫者的大小上,但老实说,我看不出你需要它做什么。我无耻地从@Mehrdad那里窃取了这个想法,并添加了例外