Как напечатать то, что находится в наборе множеств с итератором?

Я пытаюсь распечатать содержимое моего powerSet который является набором данного набора, однако, когда я пытаюсь перебрать мой powerSet, Я получаю C2679 Ошибка << двоичный «<<«с этой следующей функцией.

template <typename T>
void writePowerSet(const set<set<T>>& pSet)
{
for(typename set< set<T> >::const_iterator itr = pSet.begin(); itr != pSet.end(); itr++)
{
cout << *itr;
}
}

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

0

Решение

pSet является ссылкой типа std::set<std::set<T>>, так *itr будет ссылка типа std::set<T>, Вы пытаетесь использовать std::ostream перегрузка << на этот тип. Однако стандартный контейнер библиотеки не определяет такую ​​перегрузку.

Если вы хотите распечатать все элементы внутреннего набора, вам необходимо выполнить итерации по нему:

template <typename T>
void writePowerSet(const std::set<std::set<T>>& pSet)
{
for(const auto& s : pSet)
{
for(const auto& x : s)
{
std::cout << x;
}
}
}

Здесь я использую основанный на диапазоне цикл for, потому что его легче писать и читать. Вывод не будет выглядеть красиво, добавьте дополнительный вывод, где вы хотите.

Это также предполагает, что << перегрузка определяется для внутреннего типа T,

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]