次のようなベクトルのマップを作成しました。
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'); ??
追加するには:
myMap[key].Push_back('c');
または、myMap.find
を使用しますが、end
イテレータを取得するかどうかを確認する必要があります。 operator[]
は、vector
への参照を返します。
ただし、コピーをmyMap[key] = myVector;
とともにvector
に保存したため、これにより、元のファイルではなく、map
に保存されたmap
が変更されます。それが望まない場合は、デザインを再考し、ベクトルへの(スマートな)ポインターをマップに格納する必要があります。
あなたが鍵を知っているとすれば:
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);
マップされた値(この場合はベクトル)にアクセスするには、値を割り当てるときと同じように、角かっこで囲んだキーを指定するだけです。したがって、「a」を追加するには:
myMap[key].Push_back('a');
新しい提案があります。 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');