2010-09-14 56 views
9

Tôi cần lưu trữ các chuỗi ở định dạng giá trị khóa. Vì vậy, tôi đang sử dụng Bản đồ như dưới đây.map <string, string> cách chèn dữ liệu vào bản đồ này?

#include<map> 
using namespace std; 
int main() 
{ 
    map<string, string> m; 
    string s1 = "1"; 
    string v1 = "A"; 

    m.insert(pair<string, string>(s1, v1)); //Error 
} 

Am nhận được dưới đây lỗi tại chèn dòng

lỗi C2784: 'bool std :: operator < (const std :: _ Tree < _Traits> &, std :: const _ Tree < _Traits> &) ': không thể suy luận đối số mẫu cho' const std :: _ Tree < _Traits> & 'từ' const std :: string '

Tôi đã thử hàm make_pair cũng giống như dưới đây, nhưng điều đó cũng báo cáo cùng một lỗi.

m.insert(make_pair(s1, v1)); 

Vui lòng cho tôi biết điều gì là sai và giải pháp cho vấn đề trên là gì. Sau khi giải quyết vấn đề trên, tôi có thể sử dụng như dưới đây để lấy giá trị dựa trên chính

m.find(s1); 

Trả lời

31

Tôi nghĩ bạn bỏ lỡ một số #include <string> ở đâu đó.

+0

Điều này làm cho mã được biên dịch. Nhưng tôi tự hỏi tại sao nó không đưa ra lỗi khi tôi nói chuỗi s1 = "1"; Chỉ khi gọi chèn nó cung cấp cho lỗi. – bjskishore123

+0

@ bjskishore123: Có lẽ bạn có một lớp khác có tên là 'chuỗi' mà bằng cách nào đó va chạm với' std :: string'? – ereOn

+2

@ereOn - hoặc có thể đó không phải là lỗi biên dịch duy nhất –

2

Hãy thử m[s1] = v1; để thay thế.

+0

Điều này cũng cho cùng một lỗi. – bjskishore123

+0

Và điều này cho bạn không có cách nào để biết liệu bạn đã chèn một nút mới hay cập nhật một nút đã tồn tại trước đó. –

4

Bạn có thể thử này:

#include<string> 

Dường như trình biên dịch không biết làm thế nào để so sánh chuỗi. Có lẽ cô ấy không biết đủ về các chuỗi, nhưng quá tập trung vào số map của bạn để tìm ra ATM đó.

+0

Ồ, thú vị! Trình biên dịch * cô *? Được rồi, tôi có thể đồng ý về điều đó. :) - Giống như Mẹ Thiên nhiên và Thiên hà Milkyway của chúng ta (bằng tiếng Phạn: Shi-shu-maa-ra = Cô-cá heo). –

1

Tôi nghĩ rằng nó phải làm với thực tế là <map> không bao gồm <string>, nhưng . Khi bạn thêm các phần tử vào bản đồ, nó cần tìm vị trí chính xác trong bản đồ bằng cách sắp xếp. Khi sắp xếp, bản đồ sẽ cố gắng xác định vị trí operator <, từ đó nó tìm thấy vị trí chính xác cho phần tử mới. Tuy nhiên, không có operator < cho định nghĩa của chuỗi trong , do đó bạn nhận được thông báo lỗi.

-2

S1 là số nguyên bạn đang hy vọng vượt qua dưới dạng chuỗi ... đó có thể là nguyên nhân chính gây ra lỗi !!

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