c++ - put vectors into a map -


my map: map <string, vector<vector<string> > >. map key user name. vector<vector<string> > > used stored messages user received. vector<string> used store each message has subject, data, etc.

now want add vector<vector<string> > > map. code :

vector<vector<string> > messagelist; vector<string> eachmessage;     if(messagemap.find(name)==messagemap.end()) //to see if user has been put map {     messagemap.insert( pair<string, vector<vector<string> > >(name,messagelist)); // create new map      eachmessage.push_back(subject); // add information     eachmessage.push_back(totalmessage);     messagelist.push_back(eachmessage);// put each message messagelist } else  {     eachmessage.push_back(subject);     eachmessage.push_back(totalmessage);     messagemap.find(name)->second.push_back(eachmessage); } 

however, code can not correctly put message information each user. missing here?

if use [] operator automatically create new entry if doesn't exist meaning don't need big if(). can reduce code this:

messagemap[name].push_back(vector<string>()); // new message messagemap[name].back().push_back(subject); // add entries message messagemap[name].back().push_back(totalmessage); 

remember messagemap[name] create new vector<vector<string> > if 1 doesn't exist name or re-use 1 there.

the .emplace_back() adds new vector<string> of vector.

the .back() access vector<string> made @ back.

note: @neilkirk says in comments can more efficient taking reference map element doesn't need looked each time:

auto& messagelist = messagemap[name]; // retrieve or create message list messagelist.push_back(vector<string>()); // new message messagelist.back().push_back(subject); // add entries message messagelist.back().push_back(totalmessage); 

Comments