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