簡體   English   中英

如何使用以列表為值的無序映射

[英]How to use an unordered map with lists as a values

我試圖弄清楚如何圍繞以列表為值的無序地圖進行操作。 是否可以通過指定的字符串鍵將一個列表分配給某個值,然后再在該列表中添加一些值或對其進行修改或替換整個列表? 我也不明白您將如何打印特定列表。

例:

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

如何從無序映射中打印列表臨時列表,以及在將其分配給“第一”后如何添加到列表中

您可以根據需要使用列表作為值的無序地圖。

例如,此類定義:

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)

如何從無序映射中打印列表臨時列表,以及在將其分配給“第一”后如何添加到列表中

這是一個示范節目

#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 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM