2011-05-13 17 views
7
typedef pair<unsigned char, unsigned char> pair_k; 
map<unsigned char, pair_k> mapping; 

que será utilizado de esta manera:Insertar par como valor del mapa

mapping[100] = make_pair(10,10); 

La pregunta es:

  1. Es esto permitido? Sintácticamente, se siente bien.
  2. ¿Sería esto acceso como una matriz como oposición a un mapa?

Respuesta

7

Eso se ve bien para mí. Pero tenga en cuenta que esto es no acceso a la matriz; simplemente lo parece porque std::map sobrecarga operator[]. Si lo hace después mapping.size(), encontrará que será 1.

2

Este es un código C++ perfectamente válido de acuerdo con la norma, por lo tanto, está permitido. Accede el mapa como un mapa solo es decir, el valor 100 se asigna a la par (10,10)

2

¿Por qué no lo intentas?

$ cat test.cpp 
#include <map> 
#include <cassert> 

int main() 
{ 
    using std::map; 
    using std::pair; 
    using std::make_pair; 

    typedef pair<unsigned char, unsigned char> pair_k; 
    map<unsigned char, pair_k> mapping; 

    mapping[100] = make_pair(10,10); 

    assert(1 == mapping.size()); 
    assert(10 == mapping[100].first); 
    assert(10 == mapping[100].second); 
    assert(false); 
    return 0; 
} 
$ g++ test.cpp -o test 
$ ./test 
Assertion failed: (false), function main, file test.cpp, line 18. 
Abort trap 
bash-3.2$ 
  1. Sin duda, es permitido y se comporta como se esperaba.
  2. Esto está accediendo al *map* a través de su subscript operator. No es acceso a la matriz.
6

El std :: mapa operator[] devuelve una referencia al elemento de mapa identificado por 100 (clave), que luego se sobrescribe con el par devuelto por std :: make_pair (10,10).

que sugeriría:

map.insert(std::make_pair(100, std::make_pair(10,10))); 

La llamada de inserción tiene la ventaja de acceder al mapa de una sola vez.

+0

Esto es sin duda un consejo útil, pero no parece responder a las preguntas. – Johnsyweb

+0

Gracias por la sugerencia, podría usar thin en lugar del que escribí. – freonix

Cuestiones relacionadas