Tôi muốn có một std :: map (int .NET 4.0). Tất nhiên chúng ta biết rằng một bản đồ là một cái cây và yêu cầu một toán tử < mà chuỗi đó không xác định cho chúng ta.Dùng std :: string làm khóa cho std :: map
Lỗi 24 lỗi C2676: binary '<': 'const std :: string' không xác định toán tử này hoặc chuyển đổi thành kiểu được chấp nhận cho toán tử được xác định trước c: \ program files \ microsoft visual studio 10.0 \ vc \ include \ xfunctional 125 1 FXCMMarketDataServer
vì vậy, tôi đưa tôi google-foo để làm việc và tìm thấy giải pháp này:
struct StringComparerForMap
{
public:
bool operator()(const std::string x, const std::string y)
{
// Add compare logic here
}
};
...
std::map<std::string, CustomObject, StringComparerForMap> myMap;
này làm việc tốt cho một thời gian, và bây giờ tôi đang gặp phải một lỗi mà tôi tin là do điều này. Một nơi nào đó sâu trong khuôn khổ STL có vẻ như nó bỏ qua định nghĩa trên và mặc định cho nhà điều hành <.
Có cách nào trong VS2010 .NET 4.0 sử dụng chuỗi làm khóa của bản đồ không?
Tôi hiểu rằng tôi có thể lấy chuỗi đó và viết một hàm để băm nó thành một int, nhưng đâu là niềm vui trong đó?
EDIT
tôi sẽ cố gắng và giải thích điều này một cách tốt nhất tôi có thể cho David. Khi bản đồ sử dụng cấu trúc so sánh, nó đổ vỡ trong bản phát hành và không thực hiện xác nhận gỡ rối khi gỡ lỗi. Các khẳng định rằng thất bại là phù hợp xtree 1746.
Biểu hiện: không hợp lệ điều hành <
| Abort | | Thử lại | | Bỏ qua |
Đó là điều khiến tôi tin rằng mặc dù cho bản đồ so sánh, nhưng vẫn còn một số đường dẫn mặc định cho nhà điều hành < để so sánh. Các dòng trong mã của tôi gây ra đây là:
CustomObject o = stringObjectMap[key];
std :: chuỗi không có định nghĩa phù hợp về toán tử được yêu cầu. Bạn có chắc chắn bạn đã bao gồm tiêu đề không? Tôi nghĩ rằng tôi đã thấy các vấn đề tương tự khi tôi không bao gồm nó; chuyển tiếp tuyên bố của std :: string có nghĩa là tên của nó chính nó được biết đến. –
Keith
.NET không liên quan gì đến std :: map or std :: string –
Điều gì khiến bạn nghĩ sâu bên trong các lớp thư viện mà nó mặc định là '<'? Nếu nó là như vậy, nó sẽ bị hỏng và bạn nên gửi báo cáo lỗi, nhưng có lẽ bạn đang hiểu sai dữ liệu - lỗi này sẽ được kích hoạt trong nhiều tình huống khác, có thể ai đó đã phát hiện ra nó trước ...Khi tôi nói với ông chủ đầu tiên của tôi rằng trình biên dịch là sai, ông mỉm cười và nói: * 99% thời gian, vấn đề nằm giữa ghế và bàn phím và không phải trong trình biên dịch * –