如何使用以列表为值的无序映射

时间:2019-06-07 16:57:00

标签: c++ algorithm list dictionary

我正在尝试找出如何使用列表作为值来围绕无序地图进行机动。是否可以通过指定的字符串键将一个列表分配给某个值,然后再在该列表中添加一些值或对其进行修改或替换整个列表?我也不明白您也将如何打印特定列表。

示例:

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

如何从无序映射中打印列表临时列表,以及在将其分配给“第一”后如何添加到列表中

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

  

我如何从无序映射中打印列表临时列表,以及如何   在将其分配给“第一”之后,我将其添加到列表中。

这是一个演示程序

#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