공부/PS
PS에서 std::pair나 std::tuple을 사용할 때
복소평면
2020. 7. 4. 11:48
타임아웃이 났다.
정렬 함수를 잘못 짰나 해서 아예 기본 정렬로 가능하게끔 코드를 수정했지만... 여전히 타임아웃이 나고 있었다.
왜 타임아웃이 난 걸까?
using type = std::pair<int, long long>;
std::vector<type> vec(N);
for (int i = 0; i < N; ++i) {
// ...
vec[i] = {-cnt, num};
}
저 코드 때문이다.
vec[i].first = -cnt; vec[i].second = num;이나
정석대로 vec[i] = std::make_pair(-cnt, num);과 같이 사용한다면 타임아웃이 나지 않는다.
나는 vec[i] = {-cnt, num};를 사용했기 때문에 타임아웃이 났다...
아마 {-cnt, num}을 만드는 과정에서 메모리에 새로 할당을 하고, vec[i]에 대입하는 과정에서 값을 또 복사해 대입하기 때문이 아닐까 예상해 본다.
또한 {}는 initializelist니까 형변환 또한 일어날 것이다..
일반적으로 개발할 때는 그렇게 큰 차이가 없겠지만, PS 할 때는 조심하도록 하자.