>백엔드 개발 >C++ >효율적인 조회를 유지하면서 지도에서 삽입 순서를 어떻게 유지할 수 있습니까?

효율적인 조회를 유지하면서 지도에서 삽입 순서를 어떻게 유지할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-03 16:17:11432검색

How Can I Preserve Insertion Order in a Map While Maintaining Efficient Lookups?

std::map에서 삽입 순서 유지

삽입 순서가 중요한 상황에서는 std::map에만 의존하는 것만으로는 충분하지 않을 수 있습니다. 삽입 순서를 유지하는 것이 우선순위인 경우 고려해야 할 다른 접근 방식이 있습니다.

한 가지 옵션은 지도의 내용을 std::벡터로 변환한 후 해당 값을 반복하고 인쇄하는 것입니다. 적절한 펑터를 활용하면 std::sort를 사용하여 삽입 순서에 따라 요소를 정렬할 수 있습니다.

그러나 빠른 조회가 필수적인 경우(예: 천만 번) 벡터를 사용하면 성능이 저하될 수 있습니다. 우려. 이러한 시나리오의 경우 Boost::multi_index 라이브러리는 맵의 효율성과 다중 인덱스의 유연성을 결합한 솔루션을 제공합니다.

boost::multi_index:

이 라이브러리를 사용하면 각 컨테이너에 대해 여러 인덱스를 설정할 수 있습니다. 이 특정한 경우에는 문자열 및 int 멤버로 value_t 구조체를 정의하고 두 개의 인덱스를 활용할 수 있습니다.

  1. 랜덤 액세스: 삽입 순서를 나타냅니다
  2. 해시된 고유: 빠른 작업을 용이하게 하기 위해 문자열 멤버를 색인화합니다. 조회
그런 다음 다음과 같이 multi_index_container를 인스턴스화할 수 있습니다.

struct value_t {
    string s;
    int i;
};

struct string_tag {};

typedef multi_index_container<
    value_t,
    indexed_by<
        random_access<>, // insertion order
        hashed_unique<tag<string_tag>, member<value_t, string, &value_t::s>>
    >
> values_t;
이 접근 방식은 컨테이너를 반복할 때 삽입 순서를 유지하면서 효율적인 조회를 허용합니다.

위 내용은 효율적인 조회를 유지하면서 지도에서 삽입 순서를 어떻게 유지할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.