카테고리 없음

vector 클래스의 연산자 사전식 정렬 문제

기술1 2024. 3. 25. 22:42
반응형

모든 단어가 입력되면 사전식 순서로 정렬하여 출력하는 문제


#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문을 통해서 출력을해줍니다.

반응형