Với một trình vòng lặp, có thể truy xuất/sử dụng hàm so sánh chính xác cho bộ sưu tập mà trình lặp này đề cập đến không?Truy xuất chức năng so sánh của thùng chứa với một trình lặp vòng
Ví dụ, chúng ta hãy giả sử tôi đang viết một thuật toán tổng quát:
template <class InIt, class T>
void do_something(InIt b, InIt e, T v) {
// ...
}
Bây giờ, chúng ta hãy nói rằng tôi muốn làm điều gì đó đơn giản, giống như tìm v
trong [b..e)
. Nếu b
và e
là trình lặp trên một số std::vector
, tôi có thể chỉ cần sử dụng if (*b == v) ...
. Tuy nhiên, giả sử rằng b
và e
là các trình lặp qua một số std::map
. Trong trường hợp này, tôi nên chỉ so sánh các phím , không phải toàn bộ loại giá trị của những gì có trong bản đồ.
Vì vậy, câu hỏi đặt ra là, khi đưa các vòng lặp đó vào bản đồ, làm cách nào để truy xuất hàm so sánh của bản đồ đó sẽ chỉ so sánh các khóa? Đồng thời, tôi cũng không muốn một cách mù quáng giả định rằng tôi đang làm việc với một số map
. Ví dụ: nếu các trình vòng lặp trỏ đến một số set
, tôi muốn sử dụng hàm so sánh được xác định cho rằng set
. Nếu họ chỉ đến một số vector
hoặc deque
, tôi có thể phải sử dụng ==
, vì các vùng chứa đó sẽ không có hàm so sánh được xác định. Ồ, gần như quên mất: Tôi nhận ra rằng trong nhiều trường hợp, một thùng chứa sẽ chỉ tương đương với operator<
thay vì operator==
cho các thành phần chứa trong đó - Tôi hoàn toàn ổn khi có thể sử dụng nó.
Không có thời gian để viết câu trả lời ngay bây giờ, nhưng điều này có thể giúp http://en.cppreference.com/w/cpp/container/map/key_comp. Hmm, không nhiều, mặc dù. Phần khó khăn là nhận được các container. –
Tôi đang nhầm lẫn với trường hợp 'set' của bạn. Bộ so sánh của một 'bộ' cần phải là tổng số thứ tự, không phải là trường hợp của' toán tử == '. – pmr
Không giống nhau, cho dù bạn chỉ so sánh khóa của mục nhập bản đồ hoặc toàn bộ mục nhập? [Chỉnh sửa] Không bao giờ bận tâm, tất nhiên nó không phải là - bạn có thể không có một hoạt động bình đẳng trên một phần bản đồ. –