음, 나는 작은 전화 번호부 응용 프로그램을 만들고 있는데, 맵을 사용하는 것이 사용할 수있는 최상의 데이터 구조가 될 것이라고 결정했습니다. 어디서부터 시작해야할지 모르겠다. (처음부터 데이터 구조를 구현해야 함)연관 배열/맵/해시 테이블 데이터 구조를 구현하는 방법 (일반적으로 C++)
3
A
답변
5
Tries은 키가 짧은 문자열 인 맵을 구현하는 데 매우 효율적입니다. 위키 피디 어 (Wikipedia) 기사는 그것을 아주 잘 설명합니다.
는 트리의 각 노드에 중복의 연결리스트는 여기 는 트라이의 기본 구조의 일치 저장할 수 있도록 중복 처리하려면struct Trie {
struct Trie* letter;
struct List *matches;
};
의 malloc (26 * sizeof 연산자 (구조체 트리는)) 그리고 당신은 배열을 가지고 있습니다. 구두점을 지원하려면 문자 배열의 끝에 추가하십시오.
일치하는 항목은 링크 된 목록이 될 수 있지만 원하는대로 구현됩니다. 구조 목록을 정의하지 않겠습니다.
2
2
가장 간단한 해결책 : 주소 항목이 포함 된 벡터를 사용하고 검색 할 벡터 위로 반복하십시오.
지도는 일반적으로 이진 트리 (균형 조정을 위해 빨간색/검은 색 나무를 찾습니다) 또는 해시 맵으로 구현됩니다. 나무는 조직, 메모리 관리 및 균형 조정에 약간의 오버 헤드가 있으며, 해시 맵에는 좋은 해시 함수가 필요하며 이는 사소하지도 않습니다. 그러나 두 구조는 모두 재미 있습니다. 둘 중 하나 (또는 둘 다 :-))를 구현하면 많은 통찰력을 얻을 수 있습니다.
데이터를 벡터 목록에 유지하고지도에 벡터에 대한 색인 (또는 항목에 대한 포인터)이 포함되도록 고려하십시오. 그러면 이름과 전화 번호에 대해 여러 개의 색인을 쉽게 만들 수 있습니다 그래서 당신은 양쪽 모두에 의해 엔트리를 찾을 수 있습니다. 난 그냥 강력
관련 문제
- 1. 일반적으로 LinearLayout.replaceView() 또는 ViewGroup.replaceView()를 구현하는 방법
- 2. CodeIgniter에서 테이블 구조를 얻는 방법
- 3. 어떤 C# 데이터 구조를 사용해야합니까?
- 4. "마스터"연관 테이블?
- 5. C#/(ADO?) .NET 2.0에서 데이터베이스 테이블 구조를 쿼리하는 방법 (오라클)
- 6. 어떤 데이터 구조를 사용해야합니까?
- 7. C# : 일반적으로 선호되는 데이터 컨테이너의 스타일은 무엇입니까?
- 8. 메시지 테이블 Edb 파일의 구조를 얻는 방법?
- 9. 사전 데이터 구조를 구현하는 올바른 방법에 관한 일반적인 질문
- 10. VHDL에서 스택/큐와 같은 데이터 구조를 구현하는 방법은 무엇입니까?
- 11. PHP에서 데이터 구조를 구현하는 가장 좋은 방법은 무엇입니까?
- 12. C++ 일반 테이블 데이터 구조
- 13. Grails 도메인 생성 연관 테이블
- 14. ASP.NET, 자바 스크립트 솔루션을 사용하여 테이블 스타일 레이아웃을 구현하는 방법
- 15. C# 데이터 집합의 테이블 재정렬
- 16. C++에서 데이터 구조를 영속화하는 방법은 무엇입니까?
- 17. 플랫 데이터 구조를 계층 구조로 변환 C#
- 18. 데이터 구조 참조를 더 일반적으로 사용하십시오.
- 19. 서버로 데이터 보내기를 구현하는 방법
- 20. C++ 동시 연관 컨테이너?
- 21. TPT 계층 구조를 사용하는 동안 EF 코드에서 동시성을 구현하는 방법
- 22. 데이터베이스 문제, 변화하는 데이터 구조를 저장하는 방법
- 23. 이러한 연관 배열을 구현하는 방법은 무엇입니까?
- 24. 적절한 데이터 구조를 java.util.Stack?
- 25. 고성능 C/C++ 해시 맵 (테이블, 사전)
- 26. 데이터 구조를 설계하는 방법은 무엇입니까?
- 27. 테이블 구조를 새 테이블로 복사
- 28. 테이블 형식의 데이터 구조를 저장하는 가장 좋은 유형은 무엇입니까?
- 29. 2D 테이블 구조를 메모리에 저장하는 데 적합한 데이터 구조는 무엇이겠습니까?
- 30. Azure 테이블 페이지 매김을 구현하는 방법
덮여있다 ++ 얼마나 C :-) 실제-작업을 위해 표준 라이브러리에서 제공하는 데이터 구조를 사용하여 추천하고 싶은 말했다
? 해답은 "하드 코딩 된 맵"에서부터 우리가 추측해야만한다면 기본적으로'std :: map'의 템플릿 버전을 다시 쓰는 것에 이르기까지 다양합니다. :) – GManNickG연상 배열은 중복을 처리하지 않습니다. 전화 번호부에 중복 번호가 있으면 어떻게 될까요? 난 당신이 이진 트리를 사용하는 것이 좋습니다 것입니다. –
@Charles std :: multimap에 중복이 포함될 수 있습니다. –