Ссылка на значение элемента карты STL? - PullRequest
8 голосов
/ 15 февраля 2009

Можно ли передать функции ссылку на значение элемента карты и изменить ее там?

foo(string & s)
{
    s = "xyz";
}

map<int, string> m;
m[1] = "abc";
foo(m[1]); // <-- Is it ok? Will m[1] be "xyz" after this call?

Спасибо.

Ответы [ 5 ]

8 голосов
/ 15 февраля 2009

Ответ - Да.

(оператор [] возвращает ссылку )

4 голосов
/ 15 февраля 2009

Да, мы можем.
И это также работает с std::vectors (и, похоже, вы используете цифровые клавиши, вы можете вместо этого использовать их).

2 голосов
/ 15 февраля 2009

Да.

Это ничем не отличается от ввода m [1] = "xyz". Компилятор сведет все это примерно к одному и тому же, как только закончит с ним.

1 голос
/ 15 февраля 2009

Совет: Возможно, вы захотите передать его как указатель, а не как ссылку. Я делаю это, чтобы обычному читателю было более очевидно, что он будет изменен.

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

Но кроме этого, да, это полностью юридический код!

0 голосов
/ 16 февраля 2009

Да, все хорошо, как все уже сказали, и, кроме того, ваш компилятор скажет вам, если это не так. Вы можете поэкспериментировать немного; попробуйте передать "hello" или (42) foo (string &), чтобы понять, какие предупреждения дает вам ваш компилятор.

...