У меня есть 2-е задание для класса C ++, который включает цепи Маркова Задание простое, но я не могу понять, как лучше всего выполнять чтение символов из файлов.
У меня есть файл около 300 КБ. Одним из правил назначения является использование классов Map и Vector. На карте (ключ только строка) и значениями будут векторы. Когда я читаю из файла, мне нужно начать собирать пары ключей.
Пример:
File1.txt
1234567890
1234567890
Если выбрать Марков k = 3, я должен иметь на своей карте:
key vector
123 -> 4
456 -> 7
789 -> 0
0/n1 -> 2
234 -> 5
567 -> 8
890 -> /n
/n -> NULL
Профессор предлагает читать символ за символом, поэтому мой алгоритм следующий
while (readchar != EOF){
tempstring += readchar
increment index
if index == Markovlevel {
get nextchar if =!EOF
insert nextchar value in vector
insert tempstring to Map and assign vector
unget char
}
}
Я опускаю некоторые другие детали. Мой главный вопрос заключается в том, что если у меня будет 318 000 символов, я буду выполнять условия каждый раз, что сильно замедляет работу компьютера (новый MAC pro). Пример программы от профессора исполняет этот файл примерно за 5 секунд.
Я не могу понять, как лучше всего читать слова фиксированной длины из текстового файла в C ++.
Спасибо!