Я думаю, что это, возможно, связано с константой M
, которую вы объявили, при каждом запуске вашей программы предполагается, что в вашем файле будет 10.000 строк.
void list(elem* HT[])
{
elem* tmp;/*call it tmp or temp*/
for (int i = 0; i < M/*use a parameter instead*/; i++) {
if (HT[i] != 0 /*Use NULL instead*/) {
cout << "\nHash code is " << i << ", key: ";
tmp = HT[i];
while (tmp != 0) {
cout << tmp->key;
tmp = tmp->leg;
}
}
}
}
Что бы я сделал is:
#include <cstring>
struct elem {
std::string key;
std::string value;//because a hashtable has key-value pairs
elem* next;
};
std::string
поставляется со своими собственными функциями.
Если вы хотите просто изучить язык, вы можете использовать вместо него std::map
и адаптировать его к вашим потребностям. Надеюсь, что это помогло.
Я предлагаю map
из-за реализации Java, помните, что дизайн структуры данных зависит от вас, если вам нужна таблица, чтобы распределить ключ по карте использования значений, если нет, используйте set.
M. Гудрич Т., Р. Тамассия и М. Гольдвассер Х. Структуры данных и алгоритмы в Java. John Wiley & Sons, 2014. Они реализуют ключевые значения.