>백엔드 개발 >C++ >C에 키-값 쌍을 저장할 때 삽입 순서를 유지하는 방법은 무엇입니까?

C에 키-값 쌍을 저장할 때 삽입 순서를 유지하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-07 01:02:11224검색

How to Maintain Insertion Order When Storing Key-Value Pairs in C  ?

std::map을 사용하여 삽입된 키-값 쌍을 순서대로 저장

std::map은 키를 저장하는 컨테이너 데이터 구조입니다. -키를 기준으로 정렬된 순서로 된 값 쌍입니다. 그러나 쌍의 삽입 순서를 유지해야 하는 경우 지도는 더 이상 이 기능을 제공하지 않습니다.

대체 솔루션

  • std ::벡터>: 벡터를 사용하여 쌍을 저장하는 것은 쉽습니다. 삽입 순서 추적이지만 자주 조회하는 경우(10,000,000회) 속도가 느려질 수 있습니다.
  • boost::multi_index: 이 라이브러리는 동일한 데이터에 대해 여러 인덱스를 허용하는 확장된 컨테이너를 제공합니다. 구조. 삽입 순서에 대한 색인을 생성하는 데 사용할 수 있으므로 해당 순서대로 쌍을 반복하고 액세스할 수 있습니다.

코드 예:

고려하세요. Boost::multi_index 접근 방식을 사용하는 이 코드 조각:

#include <boost/multi_index_container.hpp>
#include <boost/multi_index/member.hpp>
#include <boost/multi_index/random_access.hpp>
#include <boost/multi_index/hashed_unique.hpp>

struct value_t {
  std::string s;
  int         i;
};

struct string_tag {};

typedef boost::multi_index_container<
  value_t,
  boost::multi_index::indexed_by<
    boost::multi_index::random_access<>, // Insertion order index
    boost::multi_index::hashed_unique<boost::multi_index::tag<string_tag>, boost::multi_index::member<value_t, std::string, &value_t::s>>
  >
> values_t;

이 예에서 value_t 컨테이너는 두 개의 인덱스, 즉 삽입 순서 인덱스와 s 멤버의 해시된 고유 인덱스를 사용합니다. 이를 통해 순서가 지정된 반복과 s 키를 통한 효율적인 조회가 모두 가능합니다.

위 내용은 C에 키-값 쌍을 저장할 때 삽입 순서를 유지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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