![](/img/trans.png)
[英]Iterating over std::map<X,std::vector<Y> > and sorting the vectors
[英]std::map<x,y>: How to declare array of struct (y) inside a map function
我想在map函數內聲明struct的n數組。 下面是代碼段,當我嘗試執行m_channelInfo [destination] = newdata [chNum]時,它向我拋出錯誤。 錯誤是,“沒有運算符匹配“ =操作數”。我對如何解決這個問題感到困惑,或者我無法使用獨立於struct函數的struct數組。 請提出建議。
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 ());
}
將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[]
正確刪除了內存
在C ++中,數組必須具有在編譯時已知的大小。 Record newdata[chNum];
是非法的。 (某些編譯器將其實現為擴展,但實際上不建議使用它)。
目前尚不清楚您要在這里做什么:
m_channelInfo[destination] = newdata;
您的地圖將一個Mac48Address
(我認為是某種結構) Record
到Record
。 將一組記錄分配給單個記錄是沒有意義的。
您能描述一下您期望地圖條目包含的內容嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.