C ++ map <string,vector <char =“”>&gt;访问</串,>

时间:2012-01-22 10:56:24

标签: c++ stl vector map

我创建了一个矢量地图,如下所示:

map<string, vector<char> > myMap;
string key = "myKey";
vector<char> myVector;
myMap[key] = myVector;

我希望能够将“char”添加到地图中的向量中,但是一旦创建了特定的键/值(向量),我就无法弄清楚如何访问所述向量以进行追加。有什么建议?我正在迭代char,并且可能会在我去的时候向向量添加很多东西,所以有一个简单的方法可以做到这一点。感谢。


我希望在我去的地方附加地图中的矢量。我不需要原始向量...我只需要返回我创建的键/向量的映射(在apending之后),以便我可以将它传递给另一个函数。地图*中的*是什么?做?这是指针吗? (我还没有在演讲中到过那里)另外,我需要:     MYMAP [键] - GT;的push_back( 'S'); 要么     MYMAP [键] .push_back( 'S'); ??

4 个答案:

答案 0 :(得分:11)

追加:

myMap[key].push_back('c');

或者使用myMap.find,但是你必须检查是否得到end迭代器。 operator[]会返回对vector

的引用

但是,这会修改vector中存储的map,而不是原始版本,因为您已将map中的副本与myMap[key] = myVector;一起存储。如果这不是您想要的,您应该重新考虑您的设计,并可能存储(智能)指向地图中矢量的指针。

答案 1 :(得分:5)

鉴于您知道关键:

string key = "something";
char ch = 'a'; // the character you want to append

map<string, vector<char> >::iterator itr = myMap.find(key);
if(itr != myMap.end())
{
    vector<char> &v = itr->second;
    v.push_back(ch);
}

您也可以使用map::operator[]来访问地图条目,但如果该密钥不存在,则会创建一个包含该密钥的新条目:

vector<char> &v = myMap[key]; // a map entry will be created if key does not exist
v.push_back(ch);

或简单地说:

myMap[key].push_back(ch);

答案 2 :(得分:1)

要访问映射值(在您的情况下是矢量),您只需在方括号中提供密钥,就像分配值一样。 所以,要附加'a':

myMap[key].push_back('a');

答案 3 :(得分:0)

我有一个新的建议。您可以使用vector<char>*代替vector<char>来收集map中向量的指针。有关更多信息,请参阅以下代码:

map<string, vector<char>* > myMap;
string key = "myKey";
vector<char>* myVector = new vector<char>();
myMap[key] = myVector;
myMap[key]->push_back('S');