Есть ли способ поиска по unordered_set с использованием ограниченного диапазона букв c? - PullRequest
0 голосов
/ 02 мая 2020

Контекст: я кодирую назначение в C ++, где пользователь вводит слово или предложение, чтобы расшифровать слово за словом. У меня есть текстовый файл, полный слов Engli sh, которые я прочитал в unordered_set строк. Затем я go перебираю каждое введенное слово и пытаюсь найти его в unordered_set. Возможности расшифровки слов распечатываются для пользователя.

Проблема: в текстовом файле много слов. Программа не работает должным образом, потому что она слишком долго go просматривает все перестановки и ищет совпадение в unordered_set.

Возможное решение: я хочу ограничить диапазон слов для поиска, потому что текстовый файл был уже в алфавитном порядке. Например, если зашифрованное слово было «cit», одна перестановка для этого слова была бы «it c». Я хочу найти все слова в unordered_set, начиная с i для "it c".

Вот что у меня есть.

void unscramble() {

    //issue - too slow, find in range?
    string word;
    string temp;
    ifstream inDictionaryFile("words_alpha.txt");
    unordered_set<string> dictionary;

    //read dictionary file into a unordered_set
    while (getline(inDictionaryFile, temp)) {
        auto result = dictionary.insert(temp + " ");
    }
    cout << "Enter something to unscramble: ";

    //find/print out matches for permuations of scrambled words
    while (cin>>word) {
        do {
            word = word + " ";
            auto result = dictionary.find(word);
            if (result != end(dictionary)) {
                cout << setw(10) << word;
            }
        } while (next_permutation(begin(word), end(word)));
    }


}

1 Ответ

0 голосов
/ 02 мая 2020

Если вам нужна перестановка только первых 3 букв, вы можете использовать unordered_multiset с ключом, равным канонической перестановке (например, отсортированные первые 3 буквы). Но я думаю, что настоящая проблема, которую вы имеете, должна решаться не с одной структурой данных, а с несколькими, одной структурой данных для хранения, другими структурами данных для индексов в этом хранилище.

...