C++: элегантный способ печати всех пар в списке

Я определяю списки как это:

std::list < pair<string, int> > token_list;

Я хочу распечатать все элементы списка, поэтому я пишу это:

std::copy(std::begin(token_list),
          std::end(token_list),
          std::ostream_iterator<pair<string, int> >(std::cout, " "));

Но я получаю эту ошибку:

error 2679:binary "<<"the operator (or unacceptable conversion) that accepts the right operand oftype (or unacceptable)

в Visual Studio. Как я могу это исправить, или есть какой-то другой способ распечатать все пары в списке?

1 ответ

Вы получаете эту ошибку, потому что нет перегруженного operator << за std::pair,

Однако распечатать список пар не так сложно. Я не знаю, если это elegant way to print all pairs in a list но все, что вам нужно, это простой цикл:

#include <iostream>
#include <list>
#include <string>

int main() {

    std::list<std::pair<std::string, int>> token_list = { {"token0", 0}, {"token1", 1}, {"token2", 2} };

    for ( const auto& token : token_list )
        std::cout << token.first << ", " << token.second << "\n";

    return 0;

}
Другие вопросы по тегам