Initialize Complex Structures From File Input
Explore how to import and initialize complex structures such as a vector of City objects directly from a formatted text file using C++20 input streams. Learn to specialize the operator>> for custom types, handle whitespace with std::ws, and address common issues like the UTF-8 Byte Order Mark on Windows. This lesson equips you to parse and populate structured data efficiently from text files.
We'll cover the following...
One strength of the input stream is its ability to parse different types of data from a text file and convert them to their corresponding fundamental types. Here's a simple technique for importing data into a container of structures using an input stream.
How to do it
In this recipe, we'll take a data file and import its disparate fields into a vector of struct objects. The data file represents cities with their populations and map coordinates:
This is
input.txt, the data file we'll read:
Las Vegas661903 36.1699 -115.1398New York City8850000 40.7128 -74.0060Berlin3571000 52.5200 13.4050Mexico City21900000 19.4326 -99.1332Sydney5312000 -33.8688 151.2093
The city name is on a line by itself. The second line is population, followed by longitude and latitude. This pattern repeats for each of the five cities.
We'll define ...