struct PeopleCompare
{
	bool operator()(const People& p1, const People& p2) const
	{
		return p1.name < p2.name;
	}

	// string만으로 검색이 가능하도록 추가 구현.
	bool operator()(const People& p1, std::string_view name) const
	{
		return p1.name < name;
	}
	bool operator()(std::string_view name, const People& p1) const
	{
		return name < p1.name;
	}

	// set에서 비교의 기준을 다양한 타입으로 허용하기 위해서 선언해주어야 한다.
	// 이때 void 부분은 어떠한 타입을 써도 상관없다.
	using is_transparent = void;
}

int main()
{
	std::set(People, PeopleCompare> s;
	s.emplace("kim", 20);
	
	// set의 find함수는 T를 인자로 받게 되어있는데,
	// 실제 검색에서는 Name만 쓰기 때문에 최적화 차원에서 String만 보내고 싶을때,
	// 다른 타입도 허용하기 위해서는 비교 함수 객체 안에 using is_transparent = void; 를 해준다.
	auto p = s.find( "kim" );
}