Я исследовал некоторое время здесь, в StackOverflow, чтобы найти хорошие алгоритмы для разделения строк с несколькими разделителями на vector< string >
. Я также нашел несколько методов:
Способ увеличения:
boost::split(vector, string, boost::is_any_of(" \t"));
метод getline
:
std::stringstream ss(string);
std::string item;
while(std::getline(ss, item, ' ')) {
vector.push_back(item);
}
токенизировать способ увеличения:
char_separator<char> sep(" \t");
tokenizer<char_separator<char>> tokens(string, sep);
BOOST_FOREACH(string t, tokens)
{
vector.push_back(t);
}
и класс STL:
istringstream iss(string);
copy(istream_iterator<string>(iss),
istream_iterator<string>(),
back_inserter<vector<string> >(vector));
и метод Shadow2531 (см. связанную тему).
Большинство из них пришли из в этом разделе. Но они, к сожалению, не решают мою проблему:
-
Разделение Boost простое в использовании, но с большими данными (в лучшем случае - около 1,5 * 10 ^ 6 отдельных элементов) и около 10 разделителей. Я использую его ужасно медленно.
-
У метода
getline
, STL и Shadow2531 есть проблема, что я могу использовать только один char как разделитель. Мне нужно еще несколько. -
Boost tokenize еще более ужасен в аспекте скорости. Потребовалось 11 секунд с 10 разделителями, чтобы разбить строку на 1,5 * 10 ^ 6 элементов.
Поэтому я не знаю, что делать: я хочу иметь очень быстрый алгоритм разделения строк с несколькими разделителями.
Разбивается ли Boost максимум или есть способ сделать это быстрее?