Как использовать неупорядоченную карту со списками в качестве значений - PullRequest
1 голос
/ 07 июня 2019

Я пытаюсь понять, как маневрировать вокруг неупорядоченной карты со списками в качестве значений.Можно ли присвоить списку значение по указанному строковому ключу, а затем добавить в этот список какое-либо значение или изменить его или заменить весь список?Я также не понимаю, как вы могли бы распечатать конкретный список.

Пример:

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

Как мне распечатать шаблон списка с неупорядоченной карты и как я могу добавить его в списокпосле того, как он был назначен на «Первый»

Ответы [ 2 ]

1 голос
/ 07 июня 2019

Как мне распечатать шаблон списка с неупорядоченной карты и как добавить его в список после того, как ему присвоено значение «Первый»

Вот демонстрационная программа

#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 
1 голос
/ 07 июня 2019

Вы можете сделать с неупорядоченной картой со списком в качестве значения, сколько вам нужно.

Например, для таких определений:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...