#include <iostream>
#include <string>
#include <set>
using namespace std;
int word_count;
string word;
struct sorting
{
bool operator()(const string& a, const string& b) const
{
bool result;
if (a.length() != b.length())
{
result = a.length() < b.length();
}
else
{
result = a < b;
}
return result;
}
};
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> word_count;
set<string, sorting> words;
for (int i = 0; i < word_count; i++)
{
cin >> word;
words.emplace(word);
}
for (string item : words)
{
cout << item << "\n";
}
return 0;
}
- 중복을 허용하지 않으므로 set 사용
- set의 기본정렬은 오름차순
- 이때 사용되는 less는 bool operator() 함수를 가진 struct
- 정렬기준을 바꾸기 위해 오버로딩을 사용하고, set에 struct를 적용하자.
- 이때, value로 파라미터를 전달해도 결과는 같지만, 속도는 차이가 있다.
- call by value: 48ms
- call by reference: 24ms
- string과 같이 call by value를 사용하는 비용이 더 높을 것으로 예상되는 경우에는 call by reference가 낫고, int 타입은 call by value가 더 낫다.