2009-11-25 29 views

Trả lời

14

Theo C++ Standard 23.1.2/7 key_type nên được gán. Loại tham chiếu không.

4

Không, vì nhiều hàm trong std :: map lấy tham chiếu đến keytype và tham chiếu đến tham chiếu là bất hợp pháp trong C++.

/A.B.

1

Xem xét operator[](const key_type & key). Nếu key_typeFoo & thì const key_type & là gì? Vấn đề là nó không hoạt động. Bạn không thể xây dựng một std :: map nơi kiểu khóa là một kiểu tham chiếu.

1

Pointer như một loại chìa khóa cho std :: bản đồ là hoàn toàn hợp pháp

#include <iostream> 
#include <cstdlib> 
#include <map> 

using namespace std; 


int main() 
{ 
int a = 2; 
int b = 3; 
int * c = &a; 
int * d = &b; 
map<int *, int> M; 

M[c]=356; 
M[d]=78; 
return 0; 
} 

tài liệu tham khảo được khởi tạo không thể được phím:

#include <iostream> 
#include <cstdlib> 
#include <map> 

using namespace std; 


int main() 
{ 
int a = 2; 
int b = 3; 
int & c = a; 
int & d = b; 
map<int &, int> M; 

M[c]=356; 
M[d]=78; 
return 0; 
} 
In file included from /usr/include/c++/4.4/map:60, 
       from test.cpp:3: 
/usr/include/c++/4.4/bits/stl_tree.h: In instantiation of 'std::_Rb_tree<int&, std::pair<int&, int>, std::_Select1st<std::pair<int&, int> >, std::less<int&>, std::allocator<std::pair<int&, int> > >': 
/usr/include/c++/4.4/bits/stl_map.h:128: instantiated from 'std::map<int&, int, std::less<int&>, std::allocator<std::pair<int&, int> > >' 
test.cpp:14: instantiated from here 
/usr/include/c++/4.4/bits/stl_tree.h:1407: error: forming pointer to reference type 'int& 

'

+1

Hãy nhớ rằng thứ tự dựa trên con trỏ là không xác định và có khả năng thay đổi với mỗi yêu cầu của chương trình. –

+1

Chưa kể rằng các phím được so sánh cho bình đẳng, và vì vậy đây là so sánh các giá trị địa chỉ con trỏ khi thực hiện tra cứu, và không so sánh giá trị con trỏ tới. Cụ thể, trong ví dụ này nếu có một int e = 2 khác, và bạn tra cứu M [& e], bạn sẽ không nhận được những gì bạn có thể nghĩ rằng bạn đang tìm kiếm. – mmocny

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