string — Хранение случайных лесов в переполнении стека

У меня есть несколько сериализованных деревьев решений (в настоящее время в виде одной длинной строки в предварительном порядке), сгенерированных методом случайного леса. Я жестко запрограммировал эти строки в классе, чтобы все деревья решений создавались после вызова конструктора. Подвести итоги:

  1. Конструктор называется
  2. Цикл for проходит по каждой строке (представляет дерево решений) и разбивает их на токены
  3. Каждый токен обрабатывается (сохраняется в векторе строк) и создается дерево решений

Теперь моя установка работает правильно, но поскольку строки очень длинные, разделение строк может занять много времени. Я хотел бы оптимизировать этот процесс, но учтите следующее:

  1. Я мог бы хранить строки непосредственно как отдельные токены, чтобы избежать полного разделения строк, но тогда мой файл CPP был бы очень большим по размеру из-за необходимости многих операторов t.push_back (str) (по одному для каждого токена). Это, наверное, последнее средство.
  2. Я мог бы хранить строки в двоичном формате, но я не уверен, поможет ли это, и это не будет читаемым человеком.
  3. Я также позаботился о том, чтобы мои деревья были обрезаны (т. Е. Использовалось как можно меньше деревьев и был установлен предел для максимальной глубины)
  4. C ++ 11 не вариант в моем случае

Буду признателен за любые мысли или предложения о лучших практиках или идеях.

Обновить

#include <string>
#include <vector>
#include <iostream>

std::vector<std::string> test(int elem){
const char* t0[] = {"t00","t01"};
const char* t1[] = {"t10","t11","t12"};
std::vector<std::string> s;
switch (elem){
case 0:
s.assign(std::begin(t0), std::end(t0));
break;
case 1:
s.assign(std::begin(t1), std::end(t1));
break;
default:
break;
}
return s;
}

int main (){
std::vector<std::string> t;
t = test(0);
std::cout << t.at(0) << std::endl;
t = test(1);
std::cout << t.at(2) << std::endl;
}

1

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]