Tôi đang viết một lớp bằng cách sử dụng Qt cần nhập từ điển sẽ được sử dụng để tra cứu lệnh và tạo câu lệnh. Các lệnh được sắp xếp theo cách phân cấp và có một khóa hex và định nghĩa giá trị tương ứng. Đối với mục đích minh họa, nó có thể trông như thế này:Mô hình cây Qt so với bản đồ lồng nhau để lưu trữ từ điển cho bản dịch
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
Tôi muốn tải từ điển này và sau đó có thể tìm kiếm nó cho "Volume/Set/50" và gửi lại câu lệnh "01 02 80" hoặc tìm lên "01 02 80" và trả về "Volume/Set/50". Việc thực hiện thực tế phức tạp hơn một chút và có các lệnh ở các mức khác nhau trong cấu trúc cây và có thể bao gồm bất kỳ số nào và kết hợp các lệnh từ các cấp khác nhau trong một câu duy nhất.
Edit:
Các bình luận được cung cấp bởi Volodymyr dưới đây giới thiệu một khái niệm (Trie) rằng tôi đã không quen thuộc với. Đây có thể là cách triển khai tốt nhất cho kịch bản cụ thể này, nhưng tôi phải nghiên cứu thêm một số điều nữa. Tôi vẫn quan tâm đến câu trả lời cho câu hỏi ban đầu của tôi (với việc bổ sung Trie):
Ưu điểm và nhược điểm của việc sử dụng từng phương pháp này để thực hiện điều này là gì?
- Qt Tree Mẫu
- Nested Maps
- Trie
câu hỏi ban đầu: (đối với bối cảnh)
Sẽ là một cây mẫu Qt, bản đồ lồng nhau hoặc một số khác có nghĩa là phù hợp hơn để lưu trữ từ điển? Tôi nhận ra rằng "tốt hơn" có thể là chủ quan, nhưng tôi muốn biết các lệnh giao dịch.
Tôi đã xây dựng Mô hình cây Qt để hiển thị một số dữ liệu khác trong QTreeView, vì vậy mã đó đã tồn tại và có thể dễ dàng được sử dụng. Mô hình cây có cho phép linh hoạt hơn trong việc tải từ điển với các cấu trúc khác nhau không? Có cách nào tốt hơn để làm điều này? hoặc có thể là một mẫu thiết kế tiêu chuẩn?
Trong trường hợp từ điển cho ngôn ngữ tự nhiên, cấu trúc dữ liệu trie có thể được sử dụng (http://en.wikipedia.org/wiki/Trie#Dictionary_representation). Có lẽ nó sẽ hữu ích cho bạn. –
Sau khi nghiên cứu Tries, nó xuất hiện như thể nó sẽ hữu ích cho việc tìm kiếm các khóa hex liên kết với một từ (mã hóa), nhưng sẽ không cung cấp khả năng dễ dàng chuyển đổi một câu hex trở lại một từ (giải mã). Nó sẽ là thích hợp để xây dựng một mô hình cây Qt của dữ liệu và sau đó xây dựng một Trie để chỉ mục vị trí của các phím để mã hóa, sau đó chỉ cần lặp qua mô hình cây Qt để thực hiện chức năng giải mã? – Chris
Tôi không thể nói bất cứ điều gì về hiệu quả của cách tiếp cận như vậy, nhưng thực tế là bạn đã có một số mã có thể được tái sử dụng làm cho tôi nghĩ rằng bạn nên thử nó. Dù sao, như bạn đã đề cập, trong trường hợp của Trie bạn sẽ cần một số cấu trúc trợ giúp như TreeModel để cho phép dịch ngược lại. Ngoài ra, nó có vẻ như trong quá trình dịch sang hex bạn cần thực hiện một số hành động trên các đối số được cung cấp (như ceil (255/100 * x)). Bạn nên mang nó vào tài khoản, bởi vì trong trường hợp này nó không chỉ là bản dịch trực tiếp. Trong trường hợp nếu có sự phù hợp trực tiếp giữa hex và chuỗi đại diện, có thể sử dụng băm hai chiều. –