如何使用带有列表作为值的无序列图

How to use an unordered map with lists as a values

本文关键字:无序 何使用 列表      更新时间:2023-10-16

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

例:

std::unordered_map <string, list<int> > testmap;
list<int> templist;
templist.pushfront(10);
templist.pushfront(5);
testmap["First"] = 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 

您可以根据需要使用带有列表作为值的无序列图。

例如,对于此类定义:

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)