ОБНОВЛЕНИЕ радикально изменил ответ!
У меня огромный набор строк журнала, и мне нужно проанализировать каждую строку (поэтому эффективность очень важна).
Просто имейте в виду, что C ++ не очень поможет с точки зрения эффективности в этой ситуации. Не думайте, что ваша программа будет иметь высокую производительность только потому, что у вас есть быстрый код синтаксического анализа на C ++!
Эффективность, которая вам здесь действительно нужна, - это не производительность на уровне «машинного кода» кода синтаксического анализа, а на уровне общего алгоритма.
Подумайте о том, что вы пытаетесь сделать.
У вас огромный текстовый файл, и вы хотите преобразовать каждую строку в структуру данных,
Хранение огромной структуры данных в памяти очень неэффективно , независимо от того, какой язык вы используете!
То, что вам нужно сделать, это «выбрать» по одной строке за раз, преобразовать ее в структуру данных и затем работать с ней, и только после того, как вы закончите со структурой данных, вы пойдете и получите следующую выровняйте и преобразуйте его в структуру данных, разберитесь с ним и повторите.
Если вы это сделаете, вы уже устранили главное узкое место.
Для разбора строки текста, кажется, формат ваших данных довольно упрощен, посмотрите аналогичный вопрос, который я задавал некоторое время назад: Разбор строк C ++ (стиль python)
В вашем случае, я полагаю, вы могли бы использовать поток строк и использовать оператор >>
, чтобы прочитать следующую «вещь» в строке.
см. этот ответ , например, код.
В качестве альтернативы (я не хотел удалять эту часть !!)
Если бы вы могли написать это на python, это было бы намного проще. Я не знаю вашей ситуации (кажется, вы застряли с C ++), но все же
Посмотрите на эту презентацию для эффективного выполнения таких задач с использованием выражений генератора Python: http://www.dabeaz.com/generators/Generators.pdf
Это стоит прочитать.
На слайде 31 он рассматривает то, что кажется очень похожим на то, что вы пытаетесь сделать.
Это, по крайней мере, даст вам вдохновение.
Это также наглядно демонстрирует, что производительность достигается не за счет конкретного кода синтаксического анализа строк, а всего алгоритма.