У меня проблема с одним из моих домашних заданий, в котором мы должны обнаружить дублирующиеся строки в векторе строк, используя хеш-таблицу. Мой код строится и компилируется нормально, но я получаю ошибку сегментации, когда пытаюсь назначить вектор возврата из алгоритма обнаружения дубликатов для вектора дубликатов. Я пытался выяснить, почему это происходит, но не могу найти решение. Я прикрепил свой код ниже.
Функция поиска дубликатов с использованием хеш-таблицы ##
std::vector<std::string>find_duplicates_with_hashtable(std::vector<std::string> & strings) {
std::vector<std::string> dups;
typedef std::unordered_map<std::string, std::string> hashtable;
hashtable table;
for (std::vector<std::string>::iterator i = strings.begin(); i < strings.end(); i++) {
std::unordered_map<std::string, std::string>::const_iterator it = table.find(*i);
if (it != table.end() && (std::find(dups.begin(), dups.end(), *i)) == dups.end()) {
dups = find_duplicates_with_sorting(dups); // line causing the problem
}
table.emplace(*i, *i);
}
return dups;
}
Функция, используемая для проверки наличия каких-либо элементов в данном векторе дубликатов
std::vector<std::string> find_duplicates_with_sorting(std::vector<std::string> & strings) {
std::vector<std::string> dups;
std::sort(strings.begin(), strings.end());
for( unsigned int i = 0; i < strings.size() - 1; ++i ) {
if( strings[i].compare(strings[i+1]) == 0 ) {
std::string found_dup = strings[i];
if( dups.size() == 0 ) {
dups.push_back(found_dup);
}
else
{
std::string last_found_dup = dups[ dups.size() - 1 ];
if( last_found_dup.compare(found_dup) != 0 ) { // Not a dup of a dup
dups.push_back(found_dup);
}
}
}
}
return dups;
}
Это контекст, в котором вызывается функция хеш-таблицы
TEST(BaseHash, SuperShortVector)
{
std::vector<std::string> dups_found;
auto & search_vector = super_short_vector;
auto & known_dups_vector = super_short_vector_dups;
dups_found = find_duplicates_with_hashtable(search_vector);
std::sort(dups_found.begin(), dups_found.end());
std::sort(known_dups_vector.begin(), known_dups_vector.end());
}
Строка, вызвавшая проблему, отмечена комментарием в функции 'find_duplicates_with_hashtable'
Кроме того, так как это домашнее задание, я был бы очень признателен, если бы кто-то мог объяснить, что я сделал неправильно, и просто дать мне общее руководство, к которому я мог бы стремиться, чтобы решить проблему, так как просто скопируйте код не поможет мне научиться
Извините, если код ужасен. У меня проблемы с пониманием, как использовать хэш-таблицы.
Спасибо:)