如果没有找到地图元素会返回什么?

时间:2011-11-21 06:35:33

标签: c++ stl map vector

我的C ++标题包含一些代码片段,如下所示:

private:
    std::map<std::string, std::vector<std::vector<unsigned short> > > m_usIRDataPool;

public:
    std::vector<std::vector<unsigned short> >& IRChannelData(std::string sChannelName);

在其实现文件(.cpp)中,IRChannelData()具有以下定义:

std::vector<std::vector<unsigned short> >& MyClass::IRChannelData(std::string sChannelName)
{   
    std::map<std::string, std::vector<std::vector<unsigned short> > >::iterator it = m_usIRDataPool.find( sChannelName );

    if ( it != m_usIRDataPool.end() )
    {  
       return it->second;
    }

  //  return ????; // How can I return?
}

那么,如果在m_usIRDataPool地图容器中没有找到任何条目(向量矢量)来摆脱

,将会返回什么
warning C4715: 'MyClass::IRChannelData' : not all control paths return a value.

3 个答案:

答案 0 :(得分:3)

  • 返回表示成功/失败的bool,并通过“out”语义参数返回结果向量的地址,或
  • 如果在地图中找不到任何元素,则
  • 抛出异常

答案 1 :(得分:0)

返回指针并返回0,以防您找不到所需内容。

答案 2 :(得分:0)

当您将引用返回到某个内容时,您无法在该函数上声明一个空映射,然后将其返回。您可以做的是声明要返回MyClass::emptyReturnMap的相同类型的MyClass std::vector<std::vector<unsigned short> >中的变量,然后返回它。但如果您正在编辑它的内容(因为返回不是常量),您将不得不在每次通话时清除它。