2009-11-25 15 views

Respuesta

14

Según C++ Estándar 23.1.2/7 key_type debe ser asignable. El tipo de referencia no es

4

No, porque muchas de las funciones de std :: map toman como referencia el tipo de clave y las referencias a las referencias son ilegales en C++.

/A.B.

1

Considere el operator[](const key_type & key). Si key_type es Foo & entonces ¿qué es const key_type &? El problema es que no funciona. No puede construir un std :: map donde el tipo de clave es un tipo de referencia.

1

puntero como un tipo clave para std :: mapa es perfectamente legal

#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; 
} 

referencias no pueden estar inicializado claves:

#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

Tenga en cuenta que el orden basado en punteros no es determinista y es probable que cambie con cada invocación del programa. –

+1

Sin mencionar que las claves se comparan por igualdad, por lo que esto es comparar los valores de la dirección del puntero al hacer una búsqueda, y no comparar el valor del puntero. Específicamente, en este ejemplo si hubiera otro int e = 2, y usted buscó M [ee], no obtendría lo que podría pensar que está buscando. – mmocny

Cuestiones relacionadas