我的地图:地图<string, vector<vector<string> > >.
映射键是用户名。
vector<vector<string> > >
用于存储用户收到的所有邮件。
vector<string>
用于存储包含主题,数据等的每条消息。
现在我想将vector<vector<string> > >
添加到我的地图中。
我的代码:
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);
}
但是,此代码无法正确地为每个用户提供消息信息。我在这里错过了什么吗?
答案 0 :(得分:1)
如果你使用[]
运算符,它会自动创建一个新条目(如果它尚不存在意味着你不需要你的大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);
请记住,messageMap[name]
将创建一个新的vector<vector<string> >
,如果尚未存在name
或,则重新使用已存在的.emplace_back()
。
vector<string>
在该向量的背面添加了新的.back()
。
vector<string>
访问您刚刚在后面制作的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);
。
注意:正如@NeilKirk在评论中所说,通过引用map元素可以提高效率,因此不需要每次都查找它:
typedef struct sample_s
{
int sampleint;
sample2 b;
} sample;
typedef struct sample2_s
{
int a;
int b;
int c;
int d;
} sample2;
int main()
{
sample t;
}