.first와 .second의 사용을 잘못하고 있었다.
그래서 정리를 해두고자 한다.
.second는 여러 C++ 표준 라이브러리의 클래스에서 반환 타입으로 std::pair 객체를 사용하는 메서드에 쓰인다. 대표적으로 아래와 같은 메서드들이 .second를 반환값으로 사용할 수 있다:
std::set::insertstd::pair<std::set<T>::iterator, bool>set.insert(value) 메서드는 value가 성공적으로 삽입되면 true, 중복으로 인해 삽입되지 않았다면 false를 반환한다..first: 삽입된 위치의 반복자.second: bool 값, 삽입 성공 여부std::map::insertstd::pair<std::map<Key, T>::iterator, bool>map.insert({key, value})는 key가 없으면 value를 삽입하고, 있으면 아무것도 하지 않는다..first: 새로 삽입된 (또는 이미 존재하는) 요소의 반복자.second: bool 값, 삽입 성공 여부std::unordered_map::insertstd::pair<std::unordered_map<Key, T>::iterator, bool>unordered_map.insert({key, value})도 map::insert와 유사하게 동작하며, key가 이미 존재하면 삽입하지 않는다..first: 새로 삽입된 (또는 이미 존재하는) 요소의 반복자.second: bool 값, 삽입 성공 여부std::unordered_set::insertstd::pair<std::unordered_set<T>::iterator, bool>unordered_set.insert(value) 메서드는 set::insert와 유사하게 value를 삽입하고 중복이면 false를 반환한다..first: 삽입된 위치의 반복자.second: bool 값, 삽입 성공 여부std::map::emplace / std::unordered_map::emplacestd::pair<std::map<Key, T>::iterator, bool> / std::pair<std::unordered_map<Key, T>::iterator, bool>map.emplace(key, value)는 중복 키가 있으면 삽입하지 않고, 없으면 {key, value}를 삽입한다..first: 삽입된 위치의 반복자.second: bool 값, 삽입 성공 여부std::set::emplace / std::unordered_set::emplacestd::pair<std::set<T>::iterator, bool> / std::pair<std::unordered_set<T>::iterator, bool>set.emplace(value)는 value가 존재하면 삽입하지 않고, 없으면 삽입한다..first: 삽입된 위치의 반복자.second: bool 값, 삽입 성공 여부std::map::equal_range / std::unordered_map::equal_rangestd::pair<iterator, iterator>equal_range(key)는 key에 해당하는 요소의 범위를 반환한다..first: 범위의 시작 반복자.second: 범위의 끝 반복자.second는 pair의 두 번째 값을 참조하여 주로 삽입의 성공 여부를 확인하거나, 연관 컨테이너의 특정 키를 가진 범위를 반환받는 데 유용하게 사용된다.