Я пытаюсь распечатать содержимое моего 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;
}
}
Я знаю, что для того, чтобы напечатать набор, вы должны выполнить итерацию по нему и почтить итератор, однако именно это и приводит к моей ошибке.
Есть ли другой способ приблизиться к этому?
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
,
Других решений пока нет …