Чтение из файла и запись в массив этих данных

Код использует хэш таблицу и алгоритм поиска в ней.

#include <iostream>
#include <string>
#include <fstream>
using namespace std;
#define N 5
#define EMPTY -1
struct HashT
{
    string name;
    int amount;
    string key;
    int adr;
};
HashT hashTabl[N];
string keys[N] = { "2112", "3435", "7658", "1236", "1876"};
string name[N] = { "Milano", "Paris", "berlin", "London", "Kiyv"};
int Hash(string key)
{
    int addr = 0;
    for (string::iterator it = key.begin(); it != key.end(); ++it)
        addr += (int)*it;
    return (addr % N);
}
int Hash(int addr)
{
    return (addr % N);
}
void Init(void)
{
    for (int i = 0; i < N; i++)
        hashTabl[i].adr = EMPTY;
}
int Insert(string key, int adr)
{
    int addr, a1;
    addr = Hash(key);
    if (hashTabl[addr].adr != EMPTY)
    {
        a1 = addr;
        do
        {
            addr = Hash(addr + 1);
        } while (!((addr == a1) || (hashTabl[addr].adr == EMPTY)));
        if (hashTabl[addr].adr != EMPTY)
            return 0;
    }
    hashTabl[addr].key = key;
    hashTabl[addr].adr = adr;

    return 1;
}
int Search(string key)
{
    int addr, a1;
    addr = Hash(key);
    if (hashTabl[addr].adr == EMPTY)
        return EMPTY;
    else
        if (hashTabl[addr].key == key)
            return hashTabl[addr].adr;
        else
        {
            a1 = Hash(addr + 1);

            while ((hashTabl[a1].key != key) && (a1 != addr))
                a1 = Hash(a1 + 1);
            if (hashTabl[a1].key != key)
                return EMPTY;
            else
                return hashTabl[a1].adr;
        }
}
int main(void)
{

    int i, res;
    string key;
    Init();
    cout << "\nKeys -> ";
    for (i = 0; i < N; i++)
        cout << keys[i] << " ";
    for (i = 0; i < N; i++)
        Insert(keys[i], i);
    cout << "\nHashed table (key-adr)" << endl;
    for (i = 0; i < N; i++)
        cout << " " << hashTabl[i].name << " " << hashTabl[i].key << "--" <<
        hashTabl[i].adr << endl;
    cout << "\n";
    for (i = 0; i < N; i++)
    {
        cout << " Input searched keys -> ";
        cin >> key;
        res = Search(key);
        if (res == EMPTY) cout << " not search \n";
        else cout << " " << res << "\n";
    }
    
}

Но как мне прочитать и записать эти данные

string keys[N] = { "2112", "3435", "7658", "1236", "1876"};
string name[N] = { "Milano", "Paris", "berlin", "London", "Kiyv"};

с помощью файла? Сам файл выглядит вот так

Попробовал вот так, но выдаёт ошибку

string keys[N];
string name[N];
string line;

ifstream in("D:\\hello.txt"); 
if (in.is_open())
{
    while (getline(in, line))
    {
        cin >> keys[N] >> name[N];
    }
}

HashT hashTabl[N]; 

in.close(); 

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

Автор решения: Kajletskiy
ifstream in("D:\\hello.txt"); 
if (in.is_open())
{
    for (int i = 0; i < N; i++) in >> keys[i];
    for (int i = 0; i < N; i++) in >> names[i];
}

Реализовал такую часть в мейне и работает так как нужно.

→ Ссылка