将矢量放入地图

时间:2015-09-26 02:30:01

标签: c++ dictionary vector data-structures

我的地图:地图<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);
}

但是,此代码无法正确地为每个用户提供消息信息。我在这里错过了什么吗?

1 个答案:

答案 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;
}