반응형
모든 단어가 입력되면 사전식 순서로 정렬하여 출력하는 문제
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
int main()
{
vector<string> words;
string str;
while (true)
{
cin >> str;
if (str == "exit")
break;
words.push_back(str);
}
sort(words.begin(), words.end());
for (auto s : words)
cout << s << " ";
cout << endl;
return 0;
}
<algorithm> 헤더를 includew하면 std::sort 함수를 사용하여 vector를 정렬할 수 있습니다. 숫자는 오름차순으로, 문자열의 사전식 순서로 정렬됩니다.
sort() 이런 식으로 해준다면 정말 편하게 사전식으로 정렬할 수 있습니다.
int main()
{
vector<string> words;
string str;
while (true)
{
cin >> str;
if (str == "exit")
break;
auto it = words.begin();
while (it != words.end() && *it < str)
it++;
if (it == words.end())
words.push_back(str);
else
words.insert(it, str);
for (auto s : words)
cout << s << " ";
cout << endl;
}
return 0;
}
해당 코드는 알파벳 순으로 정렬된 순서대로 출력하는 프로그램입니다. words에 vector에 저장되며 exit을 할 경우 break가 되어서 빠져나옵니다.
cin 으로 str을 입력받으며 중요한 iterator는 words.begin() 부터 시작을 하고 있습니다.
it가 끝이 아니거나 *it가 < str 입력받는 것보다 작을 때 it는 증가하게 됩니다. 그런데 만약 it >= str이라면 insert를 통해 it위치에 str을 삽입하게 됩니다.
이렇게 사전식 정렬을 쭉 해준 다음에 마지막에 for문을 통해서 출력을해줍니다.
반응형