Я некоторое время исследовал здесь, в 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 или есть способ сделать это быстрее ?