std :: map <x,y>:如何在map函数中声明struct(y)数组</x,y>

时间:2014-05-01 08:00:30

标签: c++ stdmap

我想在map函数中声明n数组struct。下面的代码片段,当我试图做m_channelInfo [destination] = newdata [chNum]时,它给我一个错误。错误是, &#34;没有运营商匹配&#34; =&#34;操作数&#34;我很困惑如何解决这个问题,或者我不能使用struct indie数组来映射函数。请建议。

chNum=10;
struct Record
  {
   int pkt;
   double frameErrorRate;
   double ProbabilityVector;

  };


void ChannelUsageData (Mac48Address destination, Mac48Address retransmitter)
{

  std::map<Mac48Address, Record>::iterator i = m_channelInfo.find (destination); 
  if (i == m_channelInfo.end ())
    {
      Record newdata[chNum];
      // std::vector<Record> newdata;
      //Record newdata;

      m_channelInfo[destination] = newdata;

    }
  i = m_channelInfo.find (destination);
  NS_ASSERT (i != m_channelInfo.end ());

}

2 个答案:

答案 0 :(得分:0)

m_channelInfo声明为std::map<Max48Address, Record*>并将迭代器定义为 std::map<Mac48Address, Record*>::iterator i

您还需要将分配更改为动态数组,而不是静态...

if (i == m_channelInfo.end ())
{
  Record* newdata = new Record[chNum];

  m_channelInfo[destination] = newdata;

}

然后你就可以将值分配为数组(指针) 并且不要忘记在去壳期间使用deleted[]正确删除内存

答案 1 :(得分:0)

在C ++中,数组必须在编译时具有已知的大小。 Record newdata[chNum];是非法的。 (有些编译器将其作为扩展实现,但使用它并不可取。)

目前尚不清楚你在这里要做什么:

 m_channelInfo[destination] = newdata;

你的地图将Mac48Address(我认为是某种形式的结构)带到Record。将一组记录分配给单个记录是没有意义的。

您能描述一下您希望地图条目包含的内容吗?