Как напечатать то, что находится в наборе множеств с итератором? - PullRequest
0 голосов
/ 18 ноября 2018

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

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;
    }
}

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

1 Ответ

0 голосов
/ 19 ноября 2018

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;
        }
     }
}

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...