Igor
Igor

Reputation: 27248

Reference to value of STL map element?

Is it OK to pass to function a reference to the value of map element, and to modify it there?

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?

Thank you.

Upvotes: 9

Views: 8228

Answers (5)

MSalters
MSalters

Reputation: 179819

Yes, it's fine - as everyone already said- and furthermore, your compiler will tell you if it isn't. You may want to experiment a bit; try passing "hello" or (42) to foo(string&) to get a feeling for the warnings your compiler gives you.

Upvotes: 0

Mr.Ree
Mr.Ree

Reputation: 8418

A word of advice: You might want to pass it as a pointer rather than a reference. I do that to make it more obvious to the casual reader that it will be changed.

It's all about communicating clearly with the next guy comming down the pike, who has to maintain this code.

But other than that, yeah, it's completely legal code!

Upvotes: 1

tunnuz
tunnuz

Reputation: 23978

Yes, we can.
And it also works with std::vectors (and since it looks like you're using numeric keys, you may consider using them instead).

Upvotes: 4

Scott Langham
Scott Langham

Reputation: 60311

Yes.

This is no different to typing m[1] = "xyz". The compiler will reduce it all to about the same thing once its finished with it.

Upvotes: 2

Assaf Lavie
Assaf Lavie

Reputation: 75983

The answer is Yes.

(operator [] returns a reference)

Upvotes: 10

Related Questions