C ++: возможно ли использовать ссылку в качестве значения на карте? - PullRequest
13 голосов
/ 21 ноября 2010

Можно ли использовать ссылку в качестве значения в стандартном контейнере карты в C ++?
Если нет - почему нет?

Пример объявления:

map<int, SomeStruct&> map_num_to_struct;

Пример использования:

...
SomeStruct* some_struct = new SomeStruct();
map_num_to_struct[3] = *some_struct;
map_num_to_struct[3].some_field = 14.3;
cout<<some_struct.some_field;
...

Я бы ожидал увидеть 14,3 напечатанных ...

Ответы [ 5 ]

13 голосов
/ 21 ноября 2010

Нет. Типы значений контейнера STL должны быть присваиваемыми . Ссылки не подлежат назначению. (Вы не можете назначить им другой объект для ссылки.)

3 голосов
/ 21 ноября 2010

Нет, это не так.Вы можете использовать указатели в качестве типа значения.

2 голосов
/ 21 ноября 2010

Нет, вы не можете использовать ссылки, но вы можете использовать указатели.Вы, кажется, смешиваете оба в своем примере.Попробуйте:

map<int, SomeStruct *> map_num_to_struct;
SomeStruct* some_struct = new SomeStruct();
map_num_to_struct[3] = some_struct;
map_num_to_struct[3]->some_field = 14.3;
cout<<some_struct->some_field;
2 голосов
/ 21 ноября 2010

Я так не думаю, ссылки должны рассматриваться как постоянные указатели на определенный элемент, если я правильно помню.Но вы можете просто использовать указатели на тот же эффект.

1 голос
/ 21 ноября 2010

Типы значений должны быть назначаемыми, а ссылки - нет.

В любом случае вы можете использовать tr1 reference_wrapper.

...