C++ 把向量放到地图上

C++ 把向量放到地图上,c++,dictionary,vector,data-structures,C++,Dictionary,Vector,Data Structures,我的地图:地图 映射键是用户名。 vector>用于存储用户收到的所有消息。 vector用于存储包含主题、数据等的每条消息 现在我想将向量>添加到我的地图中。 我的代码: vector<vector<string> > messageList; vector<string> eachMessage; if(messageMap.find(name)==messageMap.end()) //to see if an user has already

我的地图:地图
映射键是用户名。
vector>
用于存储用户收到的所有消息。
vector
用于存储包含主题、数据等的每条消息

现在我想将
向量>
添加到我的地图中。 我的代码:

vector<vector<string> > messageList;
vector<string> eachMessage;
    if(messageMap.find(name)==messageMap.end()) //to see if an user has already been put into the map
{
    messageMap.insert( pair<string, vector<vector<string> > >(name,messageList)); // create a new map

    eachMessage.push_back(subject); // add information
    eachMessage.push_back(totalMessage);
    messageList.push_back(eachMessage);// put each message into the messageList
}
else 
{
    eachMessage.push_back(subject);
    eachMessage.push_back(totalMessage);
    messageMap.find(name)->second.push_back(eachMessage);
}
向量消息列表;
向量每条消息;
if(messageMap.find(name)=messageMap.end())//查看是否已将用户放入映射中
{
messageMap.insert(pair(name,messageList));//创建一个新映射
每个消息。推回(主题);//添加信息
每个消息。推回(totalMessage);
messageList.push_back(每条消息);//将每条消息放入messageList
}
其他的
{
每个消息。推回(主题);
每个消息。推回(totalMessage);
messageMap.find(name)->second.push_back(每条消息);
}

但是,此代码无法正确放置每个用户的消息信息。我在这里遗漏了什么吗?

如果您使用
[]
操作符,它将自动创建一个新条目,如果它不存在,这意味着您不需要大的
If()
。您可以将代码简化为:

messageMap[name].push_back(vector<string>()); // new message
messageMap[name].back().push_back(subject); // add entries to the message
messageMap[name].back().push_back(totalMessage);

“但是,此代码无法正确放置每个用户的消息信息。”->这意味着什么?程序没有编译?它编译但崩溃?它运行但输出损坏?谢谢您的回复。此代码无法将正确的消息列表放入每个用户。我建议您使用map的
操作符[]
,如果该条目不存在,它将自动创建该条目<代码>自动&输入=消息映射[名称]现在您可以直接推回条目,而不必制作许多副本。它还将只搜索地图一次,而您每次操作都要进行两次查找。您可能会发现为诸如vector之类的类型创建TypeDef很方便。当您插入到vector中时,它会创建一个副本。因此,您将数据添加到与插入的向量不同的向量中以避免多次搜索地图。谢谢@Galik当我运行你的代码时,它给出了错误。“您的编译器可能缺少C++11支持。请尝试
entry.resize(entry.size()+1)
其中条目是对地图中的值的引用。谢谢。你能确切地教我如何将代码更改为吗?@NeilKirk我添加了你的建议,作为一种更有效的替代方法。我试图保持它的简单性,但对于初学者来说,这永远不会是一个简单的数据结构。
auto& messageList = messageMap[name]; // retrieve or create message list
messageList.push_back(vector<string>()); // new message
messageList.back().push_back(subject); // add entries to the message
messageList.back().push_back(totalMessage);