kyo20111   3년 전

https://www.acmicpc.net/source/20958156

https://www.acmicpc.net/source/20958109

두 코드 차이점이 38, 39 줄에서 s.erase(s.find(a[x])) / s.erase(s.lower_bound(a[x])) 일 뿐인데 전자는 런타임 에러, 후자는 맞았습니다를 받습니다.

코드상으로 a[x]는 반드시 멀티셋안에 들어있으므로 당연히 둘 다 맞을거라 생각했지만 이것때문에 맞왜틀 좀 했습니다


multiset에서 원소를 지울 때 find 랑 lower_bound 두개의 차이가 있나요?

slah007   3년 전

http://www.cplusplus.com/reference/set/multiset/find/

http://cplusplus.com/reference/set/multiset/lower_bound/

둘 다 못찾으면 multiset.end()을 반환하는건 맞지만, find()는 정확히 존재해야 하는데 비해 lower_bound()는 첫 원소보다 더 작은 원소를 넣어도 찾을테니 runtime error가 나지 않는다는 차이가 있습니다. 전체 코드가 없어서 뭐가 문젠지 정확히는 알 수가 없네요.

kyo20111   3년 전

i != j 라는 조건이 없어서 i == j 인 쿼리가 주어질 때오류가 나던 것이였습니다.

이러한 데이터가 있으면 lower_bound일때 틀리는( 엉망이 되버리는 ) 코드이기 때문에 없을 것이라 생각했는데 assert문으로 확인한 결과 있었네요

데이터를 추가해야겠습니다.

답변 감사합니다.

댓글을 작성하려면 로그인해야 합니다.