Первая (самая очевидная) проблема заключается в том, что вы не устанавливаете ширину поля для названия суда.По умолчанию установлено значение 0, поэтому каждое имя печатается с минимальной шириной, необходимой для отображения всего имени.Задание ширины других столбцов после этого мало что дает.
Чтобы задать ширину, вы, вероятно, захотите просмотреть элементы, найти самый широкий, а затем добавить несколько дополнительных пробелов, чтобы получить поле междустолбцы.
#include <iostream>
#include <sstream>
#include <iomanip>
#include <ios>
#include <string>
#include <algorithm>
#include <vector>
struct court {
std::string name;
int height;
int width;
};
int main() {
std::vector<court> courts {
{ "Auburn park", 12, 16},
{ "Alabama", 14, 17},
{"Wilsonville Stadium", 51, 123}
};
auto w = std::max_element(courts.begin(), courts.end(), [](court const &a, court const &b) { return a.name.length() < b.name.length(); })->name.length();
for (auto const &c : courts) {
std::cout << std::left << std::setw(w+5) << c.name
<< std::right << std::setw(5) << c.height
<< std::setw(5) << c.width << "\n";
}
}
Результат:
Auburn park 12 16
Alabama 14 17
Wilsonville Stadium 51 123