2013-05-07 28 views
15

Tôi đã tra cứu từ điển trong C# và có vẻ rất hữu ích, và tự hỏi liệu có thể sử dụng chúng trong C++ hay không. dường như không phải là tương đương mà tôi có thể tìm thấy. Có một số loại thư viện mà tôi có thể tải xuống và đưa vào dự án hoặc có chức năng thực hiện điều tương tự chỉ với một tên khác.Có thể sử dụng từ điển trong C++

Trả lời

15

Có loại tương ứng trong STL, được gọi là std::map.

Nó có chức năng cơ bản giống như từ điển .NET, nhưng việc triển khai hoàn toàn khác. std::map là nội bộ dựa trên cơ sở dữ liệu cây đỏ đen, trong khi Dictionary sử dụng bảng băm trong nội bộ.

Nếu bạn chỉ đang tìm kiếm thứ gì đó có cùng hành vi, std::map sẽ thực hiện, nhưng nếu bạn có lượng dữ liệu lớn, bạn phải biết các đặc tính hiệu suất khác nhau.

+11

unordered_map :) – NoSenseEtAl

+2

'std :: unordered_map' thực hiện chức năng từ điển bằng cách sử dụng bảng băm (như C# 'Từ điển') --__ IF__ bạn có C++ 11 –

+2

@SchighSchagh: vâng, luôn có 'boost :: unordered_map 'else;) –

6

std::map cho thời gian truy cập logarit (thường dựa trên việc triển khai cây) và std::unordered_map (kể từ C++ 11) cho thời gian truy cập tuyến tính thường xuyên nhất, thường xảy ra (thường dựa trên triển khai băm).

+0

Tôi muốn nói rằng tiêu chuẩn yêu cầu triển khai băm cho 'std :: unordered_map' và thậm chí là phiên bản quản lý va chạm rất cụ thể. Nếu không, các hàm như 'bucket_count()' và 'load_factor()' có nghĩa là gì? –

+0

@JamesKanze Nó thực sự sẽ là khá khó khăn để đến với một thực hiện khác nhau của 'std :: unordered_map'. Tôi đã cố gắng nhấn mạnh thực tế là tiêu chuẩn không thực sự đòi hỏi một sự thực hiện cụ thể, chỉ có các "hiệu ứng quan sát được" (theo nghĩa thông thường, không phải trong định nghĩa chuẩn). – Angew

+1

* thường dựa trên việc triển khai băm *: Tôi sẽ nói rằng vì các vị từ chỉ được cung cấp là một hasher (mặc định là 'std :: hash ') và một bộ so sánh (mặc định là 'std :: equal_to '), và xem xét các ràng buộc phức tạp, nó ** phải ** là một loại bảng băm. Hơn nữa, các yêu cầu về độ ổn định của bộ nhớ cũng hạn chế không gian thiết kế (ví dụ như việc giải quyết vấn đề địa chỉ với việc di dời trên máy phục hồi được loại trừ). –

Các vấn đề liên quan