如何在创建列表时将列表存储在字典中,然后将其清除然后用于具有不同值的下一个键?

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

【讨论】:

以上是关于如何在创建列表时将列表存储在字典中,然后将其清除然后用于具有不同值的下一个键?的主要内容,如果未能解决你的问题,请参考以下文章

如何在python中为2个列表和其他字典创建字典?

如何将返回的字典变成一个大列表?

6.字典练习

如何使用一个按钮切换 IMG 删除和附加?

在 C# 中将结构类型存储在列表或字典中

***列表和字典在底层中 谁更快***