C++ 프로그램을 평범한 C로 다시 작성합니다. 이것은 map
을 사용하여 입력시 단어의 수를 계산하는 아주 간단한 프로그램입니다. 정적 크기의 해시 테이블 (구조체의 크기와 링크 된 노드 목록에 대한 포인터 배열 포함)을 사용하고 있습니다. 내가 주로 해시 함수를 사용하여 정렬되지 않은 버전을 구현 한 Cmap과 unorderd_map 사이의 구현 차이점
#if 1 // switch between 1 and 0
# include <tr1/unordered_map>
typedef std::tr1::unordered_map<std::string,int> map_t;
#else
# include <map>
typedef std::map<std::string,int> map_t;
#endif
에 재 작성 다음과 같은 부분에 문제가있어, 나는이 방법
#if 1 // switch between 1 and 0
int hash_function(const char *key, int size);
#else
#define hash_function(key, size) .......
#endif
을 사용하지만, 지금은 방법이해야 아무 생각이 없다 내가 테이블을 정렬하고 테이블의 정적 크기를 가지기 때문에 매크로 모양이 좋아 보인다. 나는지도에 대한 경험이 없으므로이를 구현하는 기존의 방법이 있는지 모르겠습니다.
테이블을 2 차원 배열로 사용하고 간단한 행렬로 사용하고 위에서 아래로 열을 채우려는 아이디어가 있습니다.
다시 말하지만,이 작업을 수행하는 데있어 기존의 방식보다 나은 점이 있습니까?
내가 알 수있는 한, 당신의 결함은 문제를 지나치게 생각하고 있습니다. 지도와 unordered_maps가 완전히 다른 문제 세트를 해결하고 정렬되지 않은지도가 (정렬 된)지도 문제를 해결하려고 시도하고 있습니까? –
std :: map은 일반적으로 해시 테이블과 완전히 다른 균형 적 이진 트리 (예 : red-black 트리)를 사용하여 구현되며 물론 해시 함수를 사용하지 않습니다. – kennytm
테이블을 정렬하려면 unordered_map을 사용할 수 없습니다. –