2014-11-25 4 views
0

У меня есть неупорядоченные карты, как это:быстрого способ разделить строку пробелов в C++

std::unordered_map<std::string, std::string> wordsMap; 

У меня есть строка, как этот

std::string text = "This is really long text. Sup?"; 

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

я понял, это решение:

void generateMap(std::string const& input_str, std::string const& language) { 
    std::string buf; // Have a buffer string 
    std::stringstream ss(input_str); // Insert the string into a stream 

    while (ss >> buf) 
     wordsMap.insert({ buf, language }); 
} 

Существуют ли какие-либо более быстрые решения?

ответ

1

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

int main() 
{ 
    const std::string language = "en"; 
    std::string input = "this is the string to split"; 

    std::unordered_map<std::string, std::string> wordsMap; 

    auto done = input.end(); 
    auto end = input.begin(); 
    decltype(end) pos; 

    while((pos = std::find_if(end, done, std::not1(std::ptr_fun(isspace)))) != done) 
    { 
     end = std::find_if(pos, done, std::ptr_fun(isspace)); 
     wordsMap.emplace(std::string(pos, end), language); 
    } 

    for(auto&& p: wordsMap) 
     std::cout << p.first << ": " << p.second << '\n'; 
} 

Выход:

split: en 
string: en 
to: en 
is: en 
the: en 
this: en 
Смежные вопросы