c++ - 将 vector 放入 map

标签 c++ dictionary vector data-structures

我的 map : map <string, vector<vector<string> > >. 映射键是用户名。 vector<vector<string> > >用于存储用户收到的所有消息。 vector<string>用于存储每条有主题、数据等的消息。

现在我想添加 vector<vector<string> > >进入我的 map 。 我的代码:

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);
}

但是,这段代码无法为每个用户正确放置消息信息。我在这里遗漏了什么吗?

最佳答案

如果您使用 []运算符,如果它不存在,它会自动创建一个新条目,这意味着你不需要你的大 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>到那个 vector 的后面。

.back()访问 vector<string>你刚刚在后面做的。

注意:正如@NeilKirk 在评论中所说,您可以通过引用 map 元素来提高效率,这样就不需要每次都查找它了:

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);

关于c++ - 将 vector 放入 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32793035/

相关文章:

c++ - 如何在 C++ 中使用 x XPath 表达式查询 HTML?

c# - 比较两个字典并返回另一个字典中的差异

javascript - 多变量 JavaScript

configuration - 如何使用 Fluent NHibernate 自动映射来映射字典?

c# - 向量和矩阵是引用类型还是值类型? Math.Net 数值

c++ - 使用自定义类的指针查找 vector

c++ - 为什么在这个 asbolute 程序中没有显示积极的条款

c++ - 删除类成员映射时在映射析构函数 STL_map.h 中发生崩溃

c++ - static_cast 可以在 C++ 中抛出异常吗?

c++ - 使用迭代器从 'find' 或 'remove' 删除