Printing a multilevel container
I would try and simplify that each structure knows how to print itself:

int main()
{
    Year    year;
    // Load data into year.

    std::cout &lt;&lt; year;

    // You can print a vector of years with:
    std::vector&lt;Year&gt;   yrs;

    std::copy(std::begin(yrs), std::end(yrs),
              std::ostream_iterator&lt;Year&gt;(std::cout, "\n"));

    // or a Simple loop:
    for(auto const&amp; year: yrs) {
        std::cout &lt;&lt; year &lt;&lt; "\n";
    }

};


To make this work you need to define an operator&lt;&lt; for Year

struct Year{
    int year;
    vector&lt;Month&gt;month;
    Year(): month(12) { }

    friend std::ostream&amp; operator&lt;&lt;(std::ostream&amp; str, Year const&amp; year)
    {
        str &lt;&lt; "{year " &lt;&lt; year.year;
        for(auto const&amp; month : year.month) {
            str &lt;&lt; month;
        }
        str &lt;&lt; "}"; 
        return str;
    }
};


So the print for Year is defined in terms of printing for a Month object. So you know have to define how to print a Month. Which in turn will print some Day objects. So you will also have to define how to print a Day object.

The problem you are seeing:

os &lt;&lt; '(' &lt;&lt; v[i].month[j].day &lt;&lt;" "&lt;&lt; v[i].month[j].day[k].hour;
//           ^^^^^^^^^^^^^^^^^
//    This is a vector.
//    The stream class does not know how to stream a vector.
//    Did you mean `v[i].month[j].month`