2016-12-31 5 views
2

삽입하는 동안 정렬하지 않고 요소를 정렬하지 않고 어떻게 유지할 수 있습니까? 정수의 순서화 세트 S가 Insert C++를 사용한 후 정렬되지 않은 세트의 순서 유지하기

  • 480
  • 를 구성되어
    • 는 S 삽입

      :

      이 문제에 대한 자세한 내용

      여기 일례이다 S = {480}

    • 32 S 삽입 : S = {32 (480)}
    • 23 S에 삽입된다 : S = {23 32 480}
    • 16 S에 삽입된다 : S는 = {16 23 32 480}
    • 19 I를 삽입 nto S : S = {19 480 32 23 16}

    마지막 삽입이 시퀀스 순서를 파괴하는 방법을 볼 수 있습니다 (더 큰 세트를 재구성하고 요소를 이동 함으로 가정합니다). 생성자에서 특별히 할당 할 필요없이 요소를 삽입 한 후 이전 순서를 유지하는 방법을 찾고 있습니다.

    +1

    ... 이름에서 제외하지 않았습니까? – ildjarn

    +0

    그래, 알아. 그러나 나는 그것이 핵심 가치만을 언급하기를 바랐다. 여기있는 사람이 내가 원하는 것을 얻을 수있는 방법을 알고 있는지 확인하고 싶었습니다. – user133495

    답변

    8

    정렬되지 않은 세트는 정의에 따라 순서가 지정되지 않습니다. 정의 된 순서는 없으며 집합의 요소 반복 순서는 언제든지 바뀔 수 있습니다.

    그리고 생성자에서 무언가를 할당해도 아무런 차이가 없습니다.

    특정 반복 순서로 세트를 원한다면, 그것은 std::set입니다. 그러나 std::set은 항상 게재 신청서가 아니라 키 값순으로 주문합니다.

    원하는 액세스 의미를 얻기 위해 여러 컨테이너를 결합해야 할 수도 있습니다.

    +0

    나는 두려웠지만 몇 가지 해결 방법이 있는지를 두 번 확인하고 싶었습니다. 고마워요, 당신의 충고에 감사드립니다. – user133495

    0

    정렬되지 않은 세트는 일반적으로 해시 함수 할당을 기반으로하며 O (1) 액세스 시간을가집니다.

    정렬 된 세트는 일반적으로 AVL 트리를 기반으로하며 액세스는 키 사이의 비교 기능을 기반으로합니다. 그들은 일반적으로 O (log (n)) 액세스 시간을 가지지 만 키 순서를 보존합니다.

    지도에서 정렬 된 키를 사용하여 빠르게 액세스하거나 거의 빠른 액세스를 원한다면 두 번 생각해야합니다. 그러나 양자를 가질 가능성은 없습니다 (양자 피직스에서의 불확정성 문제와 같습니다 :)