Есть следующая функция, она должна возвращать ссылку на значение ключа, если ключ такой существует в словаре, иначе выбрасывать исключение, но почему-то она возвращает вместо ссылки значение. Почему так происходит?
template<class K, class V> V& GetRefStrict(map<K, V> container, const K& key) {
if(auto it = container.find(key); it != container.end()) {
return it->second;
}
throw runtime_error("Unfortunately this key didn't finded");
}
int main() {
map<int, string> m = {{0, "value"}};
string& item = GetRefStrict(m, 0);
item = "newvalue";
cout << m[0] << endl; // returns value instead newvalue
}
Брр! Ссылку на переменную, которая удаляется при выходе из функции? У вас программа вообще свалиться должна, по-хорошему...
Вы передаете map
по значению, создается копия, которая умирает при выходе из функции, итератор указывает в не пойми куда, вы меняете что-то где-то... Но только не в вашем исходном m
. Делайте так:
GetRefStrict(map<K, V>& container,
Обратите внимание на &
.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Иногда работаю с IDE на Андроиде (в основном Dcoder)Как можно подключить (и можно ли вообще) заголовочный либо любой другой файл средствами языка,...
хочу написать очередь (с нуля на с++) используя 6 стеков(так как прочитал что ее можно написать так, чтобы любая операция выполнялась за О(1))...
Хочу реализовать класс Vector как сущность линейного пространства, а затем от него наследовать обычный DoubleVector и MatrixДля этого мне бы хотелось...