 <p>The simplest and pretty much idiomatic way to do it would be:</p> <pre><code>QMap&lt;QString, QVector&lt;QString&gt;&gt; devices; // Get the vector constructed in the map itself. auto &amp; commands = devices[RadioID]; // Fill commands with lots of data here - a bit faster commands.resize(2); commands[0] = "Foo"; commands[1] = "Bar"; // Fill commands with lots of data here - a bit slower commands.append("Baz"); commands.append("Fan"); </code></pre> <p>You'll see this pattern often in Qt and other code, and it's the simplest way to do it that works equally well on C++98 and C++11 :)</p> <p>This way you're working on the vector that's already in the map. The vector itself is never copied. The members of the vector are copied, but they are implicitly shared, so copying is literally a pointer copy and an atomic reference count increment.</p>