Быстрое разделение строк с несколькими разделителями

Я некоторое время исследовал здесь, в StackOverflow, чтобы найти хорошие алгоритмы для разделения строк с несколькими разделителями на vector Я также нашел несколько методов:

Способ повышения:

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);
}

способ токенизации Boost:

char_separator sep(" \t");
tokenizer> tokens(string, sep);
BOOST_FOREACH(string t, tokens)
{
   vector.push_back(t);
}

и отличный способ STL:

     istringstream iss(string);
     copy(istream_iterator(iss),
     istream_iterator(),
     back_inserter >(vector));

и метод Shadow2531 (см. Связанную тему).

Большинство из них пришло из этой темы . Но, к сожалению, они не решают мою проблему:

  • Split Boost прост в использовании, но с большими данными (около 1,5 * 10 ^ 6 отдельных элементов в лучшем случае) и примерно 10 разделителями, которые я использую, это ужасно медленно.

  • Метод getline , STL и Shadow2531 имеют проблему, заключающуюся в том, что я могу использовать только один единственный символ в качестве разделителя. Мне нужно еще несколько.

  • Токенизация Boost еще более ужасна с точки зрения скорости. Чтобы разбить строку на 1,5 * 10 ^ 6 элементов, потребовалось 11 секунд с 10 разделителями.

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

Максимальное разделение Boost или есть способ сделать это быстрее ?

27
задан Community 23 May 2017 в 10:29
поделиться