web-dev-qa-db-ja.com

C ++ map <string、vector <char >>アクセス

次のようなベクトルのマップを作成しました。

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

マップ内のベクトルに「char」を追加できるようにしたいのですが、特定のキー/値(ベクトル)が作成された後、そのベクトルにアクセスして追加する方法がわかりません。助言がありますか?私はcharを繰り返し処理していて、ベクトルに多くのことを追加している可能性があるので、簡単な方法があると便利です。ありがとう。


マップ内のベクトルを追加していきたいのですが。元のベクターは必要ありません...別の関数に渡すことができるように、(追加後に)作成したキー/ベクターのマップを返す必要があります。 * in map *>は何をしますか?それはポインタを参照していますか? (私はまだ講義に参加していません)また、必要ですか:myMap [key]-> Push_back( 's');またはmyMap [key] .Push_back( 's'); ??

11
MCP

追加するには:

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

または、myMap.findを使用しますが、endイテレータを取得するかどうかを確認する必要があります。 operator[]は、vectorへの参照を返します。

ただし、コピーをmyMap[key] = myVector;とともにvectorに保存したため、これにより、元のファイルではなく、mapに保存されたmapが変更されます。それが望まない場合は、デザインを再考し、ベクトルへの(スマートな)ポインターをマップに格納する必要があります。

13
Fred Foo

あなたが鍵を知っているとすれば:

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);
6
Meysam

マップされた値(この場合はベクトル)にアクセスするには、値を割り当てるときと同じように、角かっこで囲んだキーを指定するだけです。したがって、「a」を追加するには:

myMap[key].Push_back('a');
1
Michael Chinen

新しい提案があります。 map内のベクトルのポインターを収集するために、vector<char>*の代わりにvector<char>を使用できます。詳細については、次のコードを参照してください。

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