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
Post a Comment