Tôi có một số câu hỏi về việc sử dụng std::map
:Có phải những thực tiễn phù hợp này khi làm việc với std :: map?
là sử dụng một
enum
là chìa khóa trongstd::map
một thực hành tốt? Xét đoạn mã sau:enum Shape{ Circle, Rectangle }; int main(int argc, char* argv[]) { std::map<Shape,std::string> strMap; // strMap.insert(Shape::Circle,"Circle"); // This will not compile strMap[Shape::Circle] = "Circle"; // But this will work return 0; }
Trong ví dụ trên, tại sao các cuộc gọi đến
insert()
tạo ra một lỗi biên dịch trong khi quá tải[]
điều hành hoạt động chính xác? Bạn nên sử dụng phương pháp nào trong số những phương pháp này để chèn các mục vào một sốstd::map
?Tôi hiểu rằng khi phương pháp
find()
được sử dụng trên lớpstd::map
, nó không thực hiện tìm kiếm tuần tự trong vùng chứa mà thực hiện tìm kiếm lôgarit nhanh hơn tìm kiếm tuần tự. Sự hiểu biết này có đúng không?
Đối với chỉnh sửa của bạn, tôi không nhìn thấy nó rất rõ ràng. Hãy tưởng tượng rằng các hình dạng phát triển đến bảy: Circle, Rectangle, Triangle, Egg, bất cứ điều gì. Sau đó, bạn có một mảnh lớp có biến "hình dạng" và muốn truy cập vào giá trị assotiated. Bản đồ sẽ nhanh hơn. –
Để Daniel: Như cha mẹ đã đề cập, một bản đồ sẽ chậm hơn vì nó là O (logn) so với thời gian cố định của vectơ. –
Có nhưng có thể tôi đang thiếu điều gì đó. Toàn bộ điểm trong bản đồ là bạn có một khóa và tìm kiếm giá trị được xác nhận _its_! Tôi biết Vòng tròn chính và muốn truy cập "Vòng kết nối" trong bản đồ, tôi không thể làm điều đó bằng véc tơ. Tôi có thể có một vector _of_ các phím và một số khác _of_ các giá trị, nhưng không tra cứu. –