std :: set과 std :: vector의 차이점은 무엇입니까?
지금 STL을 배우고 있습니다. 나는 set
컨테이너 에 대해 읽었습니다 . 언제 사용하고 싶 set
습니까? 세트에 대한 설명을 읽은 후에 는 vector
. 당신은 프로와 COS는 말할 수 vector
대 set
용기. 감사
A set
가 주문됩니다. 제공하는 펑터에 따라 특정 순서로 유지되는 것이 보장 됩니다. 추가하거나 제거하는 요소에 관계없이 (에서 허용되지 않는 중복을 추가하지 않는 한 set
) 항상 정렬됩니다.
A vector
에는 명시 적으로 지정한 순서 만 있습니다. 의 항목은 항목 vector
을 넣는 위치입니다. 순서가 맞지 않게 넣으면 순서가 맞지 않습니다. 이제 sort
컨테이너를 다시 정렬해야합니다.
물론 set
상대적으로 사용이 제한적입니다. 적절한 훈련을 통해 a에 항목을 삽입 vector
하고 주문을 유지할 수 있습니다. 그러나 컨테이너에서 항목을 지속적으로 삽입하고 제거 vector
하면 많은 문제가 발생합니다. 그것은 사실상 단지 배열이기 때문에 많은 요소 복사 / 이동 등을 수행 할 것입니다.
에 항목을 삽입하는 데 걸리는 시간은에 vector
이미있는 항목 수에 비례합니다 vector
. 항목을에 삽입하는 데 걸리는 시간은 항목 set
수의 log₂ 에 비례 합니다. 항목 수가 많으면 큰 차이입니다. log₂ (100,000)은 ~ 16입니다. 속도가 크게 향상되었습니다. 제거도 마찬가지입니다.
그러나 모든 삽입을 초기화 시간에 한 번에 수행하면 문제가 없습니다. 에 모든 것을 삽입 vector
하고 정렬 한 다음 (한 번 지불) sorted vectors
에 대한 표준 알고리즘을 사용 하여 요소를 찾고 정렬 된 목록을 반복 할 수 있습니다. a의 요소에 대한 set
반복이 정확히 느리지는 않지만 a를 반복하는 vector
것이 더 빠릅니다.
따라서 정렬 vector
이 set
. 즉, 필요하다는 것을 알지 못하는 한 이러한 종류의 최적화 비용을 정말로 신경 쓰지 말아야합니다. 그래서를 사용 set
하면 시스템의 종류와 경험을하지 않는있는 거 쓰기 (따라서 그 성능이 필요하다는 것을 알고) 또는 당신이 필요로 있음을 알려줍니다 손에 프로파일 데이터가 vector
아닌가 set
.
그들은 다른 것입니다. 벡터의 순서를 결정하고 원하는만큼 동일한 것을 벡터에 넣을 수도 있습니다. 세트는 해당 세트의 내부 규칙에 따라 정렬되며 (규칙을 설정할 수 있지만 세트는 순서를 처리합니다) 여러 개의 동일한 항목을 세트에 넣을 수 없습니다.
물론 고유 한 항목의 벡터를 유지할 수는 있지만 집합 지향 작업을 수행하면 성능이 크게 저하됩니다. 예를 들어 10000 개의 항목 세트와 10000 개의 고유 한 순서가 지정되지 않은 항목의 벡터가 있다고 가정합니다. 이제 값 X가 집합의 값 (또는 벡터의 값)에 있는지 확인해야한다고 가정합니다. X가 항목에 없으면 벡터 검색이 약 100 배 느려집니다. 집합 합집합 및 교차를 계산할 때 유사한 성능 차이를 볼 수 있습니다.
요약하면 세트와 벡터는 서로 다른 목적을 가지고 있습니다. 세트 대신 벡터를 사용할 수 있지만 더 많은 작업이 필요하고 성능이 상당히 저하 될 수 있습니다.
벡터 (O (log (n)) 대 O (n))보다 집합에 대해 항목을 검색하는 것이 더 빠릅니다. 벡터에 대해 항목을 검색하려면 벡터의 모든 항목을 반복해야하지만 세트는 검색을 최적화하기 위해 빨간색-검정색 트리를 사용하며 일치하는 항목을 찾기 위해 몇 개의 항목 만 찾습니다.
세트는 순서가 지정됩니다. 즉, 가장 작은 것부터 가장 큰 것까지 순서 또는 역순으로 만 반복 할 수 있습니다.
그러나 벡터는 순서가 지정되지 않았으므로 삽입 순서로 이동할 수 있습니다.
양식 cpluplus.com 세트 :
집합은 특정 순서에 따라 고유 한 요소를 저장하는 컨테이너입니다.
따라서 세트가 주문되고 항목이 고유하게 표시됩니다.
vect 동안 :
벡터는 크기가 변경 될 수있는 배열을 나타내는 시퀀스 컨테이너입니다.
그래서 벡터는 당신이 그것을 채우는 순서이고 여러 개의 동일한 항목을 가질 수 있습니다
선호하는 세트 :
- 여러 개의 동일한 값을 필터링하려는 경우
- 지정된 순서로 항목을 구문 분석하려는 경우 (벡터에서이 작업을 수행하려면 특별히 벡터를 정렬해야 함).
벡터 선호 :
- 동일한 값을 유지하려면
- 푸시 한 것과 동일한 순서로 항목을 구문 분석하려는 경우 (벡터 순서를 처리하지 않는다고 가정)
참고 URL : https://stackoverflow.com/questions/8686725/what-is-the-difference-between-stdset-and-stdvector
'UFO ET IT' 카테고리의 다른 글
UITableView의 셀을 선택할 수 없도록 만드는 방법은 무엇입니까? (0) | 2020.11.22 |
---|---|
카메라 의도 사진 촬영 후 갤러리 이미지 삭제 (0) | 2020.11.21 |
R에서 데이터 프레임과 목록의 차이점은 무엇입니까? (0) | 2020.11.21 |
모바일 웹 브라우저에서 입력 [type = 'file']을 사용하여 사진을 캡처 한 후 캔버스에서 올바른 방향으로 사진을 그리는 방법은 무엇입니까? (0) | 2020.11.21 |
동일한 도메인의 CORS 오류? (0) | 2020.11.21 |