2013-05-02 6 views
1

집합은 모든 정보를 제공하여 개체 정보를 얻는 데 사용되며 대개 데이터가 있는지 확인하는 데 사용됩니다. 맵은 키 (단일 데이터)를 사용하여 오브젝트 정보를 얻는 데 사용됩니다. 내가 틀렸다면 나를 바로 잡아라. 이제 질문은 왜 우리가 처음에 세트가 필요한지, 데이터가 존재 하는지를 알기 위해지도를 작성할 수 없는가하는 것입니다. 왜 우리는 그것이 존재 하는지를보기 위해서 모든 정보를 제공 할 필요가 있을까요?왜지도 대신 세트가 사용됩니까? C++

답변

0

집합에는 순서가 지정된 값의 고유 목록이 포함되어 있지만지도에는 키를 사용하여 액세스 한 정렬되지 않은 값의 고유하지 않은 집합이 포함될 수 있습니다.

개체가 있는지, 사용 사례에 따라 다르며 개체에 액세스 할 수 있어야하는지 여부를 결정하는 데 사용할 수 있습니다. 집합에 참조가있는 개체가 있는지 테스트 할 수 있습니까? , 또는 그것을 비교할 수 있도록 하나 이상의 키로 검색해야합니까?

+0

그래서 세트는 항상 주문되며 맵은 항상 순서가 지정되지 않습니까? – FJam

+4

'std :: set'에는 순서 붙일 수 있었던 값의 일의의리스트가 포함되어 있습니다. 'std :: multiset'는 중복을 가질 수 있지만 포함 된 객체는 여전히 정렬됩니다. 'std :: map'은 고유 한 정렬 키 집합을 포함하고 각 키는 하나의 값과 연관됩니다. 'std :: multimap'는 중복 키를 포함 할 수 있지만 키는 여전히 정렬되어 있습니다. –

+0

틀린 -'std :: map'은 중복 키를 포함 할 수 없으며'std :: set'도 사용할 수 없습니다. 'std :: multimap'과'std :: multiset'는 배수를 포함 할 수 있습니다. 수정 될 때까지 투표를해야합니다. –

2

세트가 필요한 작업이 많이 있습니다. 맵을 사용하는 것은 여분의 공간 일뿐입니다.

  1. 조작 설정 (결합, 교차 등). 숫자 모음에서 독특한 요소를 유지
+1

+1 이것은 내가 보는 진짜 문제입니다. 대부분의 경우 키가 필요하지 않습니다. 왜지도를 사용합니까? – Luke

+0

이 맞습니다. 세트는 요소의 크기가 작아서 삽입 + 정렬이 빠르면 특히 유용합니다. 또한, 세트와 맵을 사용하는 것은 요소 수가 적 으면 좋은 것입니다 (여기서 작은 것은 상대적입니다). 이 강좌가 유용 할 수 있습니다 (http://www.youtube.com/watch?v=aIHAEYyoTUc) Alex는 가능한 한 배열/벡터를 사용하려고합니다. –

1

set 자체 (즉, 그들이 equal 아니다) 중 다른 것과 같은 type 그룹의 항목에 제공 개체. 예를 들어, 12은 모두 int 유형이지만 1!=2입니다.

set 컨테이너는 동질적인 물건의 그룹을 그룹으로 추적하고 해당 그룹 (교차점, 합집합, 차이점 등)에서 수학 연산을 수행하려는 경우에 유용합니다. 예를 들어, 단어 catdog을 언급하는 모든 문서가 포함 된 검색 결과가 set 인 경우를 생각해보십시오. 그리고 pet을 언급하는 모든 문서를 포함하는 또 다른 set. 이 두 세트 중 unioncat, dogpet을 포함하는 문서 그룹을 제공합니다. 이러한 그룹에는 반복이 없습니다 (즉, 문서가 초기에 두 세트에 모두있는 경우 두 번째 세트에 한 번만 나타납니다).

maps 가장 확실 하지set,하지만 그들은 당신이 set의 모든 요소에 값을 연결할 수있는 장치로 볼 수있다. 그것들은 관계를 나타 내기 위해 사용됩니다. 예를 들어, 한 회사에서 근무하는 사람들의 setemployee_number과 연관되어 있습니다. 이 경우 map은 이러한 관계를 나타내는 데 유용한 구조가됩니다.

각 페이지에 액세스 한 횟수를 알고 싶다면 std::map<Page, int> 행을 따라지도를 만들 수 있습니다. 즉, 페이지 간의 관계와 각각 방문한 시간. 지도의 키를 형성하는

공지하고,이 속성의 의미는 당신이 단지 주어진 (일부 비의 용기가 키 하면 어디를 가질 수 있다는 것입니다 (아마 많은 사람들에게 혼란을 것입니다)를 set 키는 다른 값으로 매핑 될 수 있습니다).

따라서 전체 그룹 및 컬렉션과 그룹 구성원과 상호 작용해야하는 경우 아마도 set이 필요합니다. 과 관련된 항목이나 그룹 회원 또는 컬렉션이있는 경우 map이 필요합니다. 연결이 둘 이상의 측정 기준에 걸쳐있는 경우 아마도 multi_map이 필요합니다. C++에서 std::setstd::map이을 을 주문하는 것을

중요 사항. C++ 11은 대안을 제공합니다. 컨테이너는 std::unordered_setstd::unordered_map입니다.

관련 문제