공부/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 할 때는 조심하도록 하자.