std::pair
не имеет перегруженного оператора вывода, вам придется записать first
и second
пары отдельно, или вы можете сделать оператор вставки.
для первого решения
for(const auto& p : vec1) {
fout << p.first << ' ' << p.second << std::endl;
}
и это делает оператор вывода и использует его, хотя это может быть излишним для этой ситуации:
РЕДАКТИРОВАТЬ: Я только что заметил, что second
, в вашем примере имеет тип std::vector
, и, как и std::pair
, у него нет перегруженного оператора вывода, поэтому вам придется сделать оператор также для std::vector
. Это общий фрагмент, который предполагает, что для типов T
и U
уже настроен оператор вывода.
#include <vector>
#include <utility>
#include <fstream>
template <typename T, typename U>
std::ostream &operator<<(std::ostream &out, const std::pair<T, U>& p) {
out << p.first << ' ' << p.second << std::endl;
return out;
}
int main() {
// ...
for(const auto& p : vec1) {
fout << p;
}
return 0;
}