2015-12-03 8 views
0

У меня есть набор строк set<string> aSet. Как преобразовать набор только в строку a, все элементы разделены запятой? Спасибо!Преобразование набора строк в простую строку C++

+1

объединить строки и запятые – user463035818

+1

Почему этот вопрос следует считать слишком широким? Хорошее, элегантное и эффективное решение этого было бы полезно. – chqrlie

ответ

2

Вот один вариант:

std::ostringstream stream; 
std::copy(aSet.begin(), aSet.end(), std::ostream_iterator<std::string>(stream, ",")); 
std::string result = stream.str(); 
1

accumulate example имеет код конкатенировать вектор целых чисел в строки, которые могут быть легко преобразованы для вашей цели:

std::string s = std::accumulate(std::begin(aSet), 
           std::end(aSet), 
           std::string{}, 
           [](const std::string& a, const std::string &b) { 
            return a.empty() ? b 
              : a + ',' + b; }); 
+0

'O (n2)' сложность. – chqrlie

1

Вот простой и читаемым способом без ничего :

string s; 

for (auto const& e : aSet) 
{ 
    s += e; 
    s += ','; 
} 

s.pop_back(); 
+0

Огромная неэффективность для большого набора. – chqrlie

+0

Да, профиль, как всегда, и если это окажется неэффективным: оптимизируйте. Сначала читаемость. – emlai

+0

Компилятор C++ может оптимизировать 'O (n2)' присущую сложность этого метода, но я очень сомневаюсь в этом. – chqrlie

Смежные вопросы