Qt를 사용하여 명령을 찾고 명령문을 작성하는 데 사용할 사전을 가져와야하는 클래스를 작성 중입니다. 명령은 계층 적 방식으로 배열되며 해당 16 진수 키 및 값 정의를 갖습니다. 예시를 들어, 다음과 같이 수 :번역을위한 사전을 저장할 중첩 된지도 대 Qt 트리 모델
01 : Volume | - 01 : Step : 00=Down, 01=Up | - 02 : Set : ceil(255/100 * x) 02 : Power | - 01 : Power : 00=Off, 01=On | - 02 : Sleep : ...etc
을 나는이 사전을로드 한 후 "볼륨/설정/50를위한"를 검색 할 수 및 반환 명령 문장 "01 02 80"나보고 싶지 up "01 02 80"을 입력하고 "Volume/Set/50"을 반환하십시오.
실제 구현은 좀 더 복잡하고 트리 구조의 여러 수준에서 명령을 가지며 한 문장에 여러 수준의 명령 조합을 포함 할 수 있습니다.
편집 :
아래 볼로디미르 제공하는 댓글이 개념 내가 익숙하지이었다 (그래서 답장을)를 소개합니다. 이 특정 시나리오에 가장 적합한 구현 일 수도 있지만 좀 더 연구해야합니다. 나는 원래의 질문에 대한 답에 여전히 관심이있다. (Trie의 추가와 함께)
이러한 구현에 대해 각각의 방법을 사용할 때의 장점과 단점은 무엇입니까?
- Qt는 트리 모델
- 중첩지도
- 트리는
원래 질문 :
(컨텍스트)겠습니까 Qt는 트리 모델, 중첩 된 맵 또는 다른 사전을 저장하는 것이 더 낫다는 의미인가? 나는 "더 나은"주관적 일지 모른다는 것을 깨달았지만 트레이드 오프를 알고 싶습니다.
QTreeView에 다른 데이터를 표시하기 위해 Qt Tree Model을 이미 구축 중이므로 코드가 이미 존재하며 쉽게 사용할 수 있습니다. 트리 모델은 다른 구조의 사전로드에 더 많은 유연성을 허용합니까? 이 작업을 수행하는 더 좋은 방법이 있습니까? 아니면 표준 디자인 패턴일까요?
자연 언어 사전의 경우 데이터 구조를 사용할 수 있습니다 (http://en.wikipedia.org/wiki/Trie#Dictionary_representation). 아마 그것은 당신에게 유용 할 것입니다. –
Tries을 연구 한 후에는 단어 (인코딩)와 연결된 16 진수 키를 찾는 데 유용하지만 16 진수 문장을 쉽게 단어 (디코딩)로 변환 할 수있는 기능은 제공하지 않는 것처럼 보입니다. 데이터의 Qt 트리 모델을 작성한 다음 인코딩을 위해 키의 위치를 색인하는 Trie를 만든 다음 Qt 트리 모델을 반복하여 디코딩 기능을 수행하는 것이 적절합니까? – Chris
그런 접근법의 효율성에 대해서는 아무 것도 말할 수 없지만, 이미 재사용 할 수있는 코드를 가지고 있다는 사실을 생각하면 시도해야한다고 생각합니다. 어쨌든, 언급 한대로 Trie의 경우 역방향 변환을 허용하기 위해 TreeModel과 같은 일부 도우미 구조가 필요합니다. 또한, 16 진수로 변환하는 동안 ceil (255/100 * x)와 같은 제공된 인수에 대해 몇 가지 작업을 수행해야합니다. 이 경우에는 직접 번역이 아니기 때문에이를 고려해야합니다. 16 진수와 문자열 표현 사이에 직접적인 일치가있는 경우 양방향 해시를 사용할 수 있습니다. –