Связать хеш-таблицу с бинарным файлом

Всем пламенный привет!

В ходе изучения дисциплины "Структуры и алгоритмы обработки данных" было получено задание по реализации хеш-таблицы (решение коллизии методом цепочек), связанной с бинарным файлом. То есть имеется структура ячейки хеш-таблицы:

struct Item {
    int key = -1;  //ключ записи
    int id;   //номер записи в двоичном файле
    Item* next = nullptr;  //указатель на следующую ячейку в хеш-таблице

    bool isEmpty() {  //проверка на пустоту ячейки
        return key == -1;
    }
};

Когда читается бинарный файл, то в хеш-таблицу передается ключ записи бинарного файла и указатель на эту запись в бинарном файле. Я что-то прочитал про функции-члены потока ввода/вывода, такие как seekg(), seekp(), tellg(), однако не до конца понял, как мне получить номер позиции записи в бинарном файле.

Стоит отметить, что записи в бинарном файле организованы следующим образом: «Владелец автомобиля: номер машины, марка, сведения о владельце, сведения об угоне (логического типа)». Для данной организации хранения была создана структура Car:

struct Car {
char number[7];
char brand[13];
char owner[14];
bool theft;

};

Исходные данные хранятся в обычном текстовом файле Cars.txt:

а777вт
NISSAN
Семенов_С.С.
0
р213ко
KIA
Ерофевв_В.С.
0
х123ск
BMW
Попов_М.С.
1
н441ву
ASTON-MARTIN
Плотников_Д.Д.
0
к923от
TOYOTA
Зотов_А.С.
1

Чтение данного файла производится следующим образом:

void readTxtFile(std::vector<Car>& cars) {
//открытие текстового файла Cars.txt и проверка
std::ifstream fin("Cars.txt", std::ios::in);
if (!fin.is_open()) {
    std::cout << "[WARNING]: File Cars.txt do not open";
    exit(0);
}

Car car;
while (!fin.eof()) {
    fin >> car.number;
    fin >> car.brand;
    fin >> car.owner;
    fin >> car.theft;

    cars.push_back(car);
}

fin.close();
}

Запись в бинарный файл BinaryCars.bin:

void toBinaryTxt(std::vector<Car>& cars) {
//создание, открытие и проверка двоичного файла
std::ofstream fout;
fout.open("BinaryCars.bin", std::ios::binary | std::ios::out | std::ios::trunc);

if (!fout.is_open()) {
    std::cout << "[WARNING]: file 'BinaryCars.bin' don't open!";
    exit(0);
}

//запись в двоичный файл
for (size_t i = 0; i < cars.size(); ++i) {
    fout.write((char*)&cars[i], sizeof(Car));
}

//закрытие файла
fout.close();
}

Ответы (0 шт):