Рассмотрим следующий код:Путаница с STL C++ контейнера оператор [] и значениями по умолчанию
unordered_map<string, vector<string>> hashtable;
string s = "foo";
hashtable[s].push_back("bar");
Это похоже на работу, но это означает, что в третьей строке, это как добавление новой записи в хеш-таблице путем инициализации вектора строк в ключе «foo», а также добавления «bar» к этому пустому вектору. Моя путаница в том, как получилось, что мы не должны явно инициализировать вектор, как:
unordered_map<string, vector<string>> hashtable;
string s = "foo";
vector<string> vec;
vec.push_back("bar");
hashtable[s] = vec;
Добавление к моей путаницы, когда мы имеем дело с вещами, как инициализация массивов в C++, это хорошо, чтобы явно инициализировать массив как так:
int array[10] = {0);
Это необходимо, если мы хотим, чтобы убедиться, что массив инициализируется все значения равны 0, так как без него, не может быть значения для мусора, хранящиеся в памяти на том же месте массив был инициализирован в. Возвращаясь к моему первому вопросу с Hashtable, как мы знаем,
hashtable[s].push_back("bar");
не толкает «бар» в вектор со значениями для мусора?
Я понимаю, что мой вопрос не совсем понятен. Любые разъяснения с поведением оператора [] и значениями по умолчанию для контейнеров STL являются общими.