如何在创建列表时将列表存储在字典中,然后将其清除然后用于具有不同值的下一个键?
Posted
技术标签:
【中文标题】如何在创建列表时将列表存储在字典中,然后将其清除然后用于具有不同值的下一个键?【英文标题】:How do I store a list in a dictionary when it is being created then cleared and then used for the next key with different values? 【发布时间】:2021-12-25 17:00:46 【问题描述】:我真正想要的是让每个键的值成为一个可供以后使用的任意列表。给出的代码只是正在尝试的示例。
#include <string>
#include <list>
#include <map>
int main()
std::map<std::string, std::list<std::string>> myMap;
std::list<std::string> myList;
int j = 0;
while(j<4)
for(int = 0; i < 6; i++)
myList.push_back("value");
myMap.insert(std::pair<std::string, std::list<std::string>("Key", myList));
myList.clear();
j++;
return 0;
【问题讨论】:
你使用std::make_pair
不确定这是否是您想要的。只是为了在每次迭代中重用myList
。下一个示例有效,因为列表在每个 while 循环开始时重置,然后复制到地图中:godbolt.org/z/M1P4oYsG1
我使用std::move(myList)
而不是副本发布了答案。这应该会为您每次插入地图保存一份列表副本。
@rturrado 谢谢!我看到你在做什么,我试图暗示它。在这个例子和带有 std::move(myList) 的例子中,假设我声明了一个字符串类型的变量;如何像你一样使用 map 下标运算符使用变量的值成为键?
加:godbolt.org/z/rG3MaW5E6
【参考方案1】:
如果你只想重用myList
:1)将列表声明移动到while
循环中,这样每次迭代都会创建一个新的空列表,然后2)使用带有右值的map下标运算符引用,以便将列表移动到地图中。
#include <iostream> // cout
#include <string>
#include <list>
#include <map>
int main()
std::map<std::string, std::list<std::string>> myMap;
int j = 0;
while (j < 4)
std::list<std::string> myList;
for(int i = 0; i < 6; i++)
myList.push_back(std::string"value" + std::to_string(j) + std::to_string(i));
myMap[std::string"Key" + std::to_string(j)] = std::move(myList);
j++;
for (auto&& [key, list_value] : myMap)
std::cout << key << ": ";
for (auto&& str : list_value)
std::cout << str << " ";
std::cout << "\n";
return 0;
Demo
【讨论】:
以上是关于如何在创建列表时将列表存储在字典中,然后将其清除然后用于具有不同值的下一个键?的主要内容,如果未能解决你的问题,请参考以下文章