【问题标题】:How to use an unordered map with lists as a values如何使用列表作为值的无序映射
【发布时间】:2019-10-23 04:57:10
【问题描述】:

我正在尝试弄清楚如何在以列表为值的无序地图周围进行操作。是否可以通过指定的字符串键将列表分配给一个值,然后在该列表中添加一些值或修改它或替换整个列表?我也不明白您将如何打印特定列表。

例子:

std::unordered_map <string, list<int> > testmap;
list<int> templist;
templist.pushfront(10);
templist.pushfront(5);
testmap["First"] = templist;

如何从无序地图中打印列表临时列表,以及如何在将其分配给“First”后添加到列表中

【问题讨论】:

  • 您不能修改映射键。您只能擦除元素并创建一个新元素。为什么还需要以列表为键的地图?
  • 请编辑您的问题以显示您希望喜欢能够使用的代码示例——即使它无法编译。
  • 我应该更清楚地说明键不是列表,但每个键都有一个与之关联的列表。说明已更新。
  • 您可能想edit 您在这里提出的具体问题。您真的在寻找“有可能吗?”的答案。这似乎是这里唯一的问题,答案是“是”。否则,我们猜测真正的问题是什么。
  • @FawksMulder 使用此代码示例时,您有什么特别的问题?您可以像往常一样添加到std::list,只要您通过密钥访问它。打印列表像往常一样在循环中完成,除非您提供 std::ostream&amp; operator&lt;&lt;(std::ostream&amp;, const std::list&amp;) 重载(这意味着循环)。

标签: c++ algorithm list dictionary


【解决方案1】:

您可以根据需要使用列表作为值的无序映射。

例如对于这样的定义:

std::unordered_map <string, list<int> > testmap;
list<int> templist;

你可以:

  • 替换或创建整个列表值:
testmap["First"] = templist;
  • 打印一些列表项
std::cout << (*testmap["First"].begin()) << endl;
  • 或打印所有项目
for (auto v : testmap["First"])
  std::cout << v << "\n";
  • 替换一些列表值
std::replace(testmap["First"].begin(), testmap["First"].end(), 20, 99)

【讨论】:

    【解决方案2】:

    我将如何从无序地图中打印列表 templist 以及如何 我将其分配给“第一”后添加到列表中

    这是一个演示程序

    #include <iostream>
    #include <string>
    #include <list>
    #include <unordered_map>
    
    int main()
    {
        std::unordered_map<std::string, std::list<int>> testmap;
    
        std::list<int> templist;
    
        templist.push_front( 10 );
        templist.push_front( 5 );
    
        testmap["First"] = templist;
    
        for ( const auto &item : testmap["First"] ) std::cout << item << ' ';
        std::cout << '\n';
    
        testmap["First"].push_front( 0 );
    
        for ( const auto &item : testmap["First"] ) std::cout << item << ' ';
        std::cout << '\n';
    }
    

    程序输出是

    5 10 
    0 5 10 
    

    或者您甚至可以使用普通循环(或标准算法,如 std::copy)来输出列表。

    #include <iostream>
    #include <string>
    #include <list>
    #include <unordered_map>
    
    
    int main()
    {
        std::unordered_map<std::string, std::list<int>> testmap;
    
        std::list<int> templist;
    
        templist.push_front( 10 );
        templist.push_front( 5 );
    
        testmap["First"] = templist;
    
        for ( auto first = testmap["First"].begin(); first != testmap["First"].end(); ++first ) std::cout << *first << ' ';
        std::cout << '\n';
    
        testmap["First"].push_front( 0 );
    
        for ( auto first = testmap["First"].begin(); first != testmap["First"].end(); ++first ) std::cout << *first << ' ';
        std::cout << '\n';
    }
    

    程序输出是

    5 10 
    0 5 10 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多