Карты STL инициализируют типы примитивов на вставке?

Я получил решение. Когда я указываю конечный объект place_id вместо lat lng, он показывает тот же результат, что и приложение Google Map. Я не знаю, как это работает. Такое изменение даже не упоминается в документации для разработчиков.

https://maps.googleapis.com/maps/api/directions/json?origin=19.107163,72.862375&destination=place_id:ChIJ_0P9DzjI5zsRf5xuhTv8VCk&sensor=falsemprivings истинный & амп; ключ = XXXXXXXXXXXXXXXXXXXXXX

43
задан Samuel Liew 3 December 2018 в 23:14
поделиться

4 ответа

оператор [] похож на это:

Value& map<Key, Value>::operator[](const Key& key);

, Если Вы называете его с ключ , это еще не находится в карте, это будет конструкция по умолчанию новый экземпляр Значение , поместить его в карту под ключ , Вы передали в, и возвратите ссылку на него. В этом случае Вы имеете:

map<wstring,int> Scores;
Scores[wstrPlayerName]++;

Значение здесь интервал , и ints создаются из значения по умолчанию как 0, как будто Вы инициализировали их с [1 111] интервал () . Другие типы примитивов инициализируются так же (, например, , двойной () , длинный () , bool () , и т.д.).

В конце, Ваш код помещает новую пару (wstrPlayerName, 0) в карте, затем возвращает ссылку на интервал, который Вы затем увеличиваете. Так, нет никакой потребности протестировать, если элемент существует уже, если Вы хотите вещи запуститься от 0.

62
ответ дан Todd Gamblin 26 November 2019 в 22:53
поделиться

Этот будет конструкция по умолчанию новый экземпляр value. Для целых чисел конструкция по умолчанию 0, таким образом, это работает, как предназначено.

11
ответ дан hazzen 26 November 2019 в 22:53
поделиться

Вы не должны тестировать, если объект существует прежде, чем увеличить его. [] оператор делает точно, что Вам нужен он, чтобы сделать, как сказали другие.

, Но что, если созданное из значения по умолчанию значение не работало бы на Вас? В Вашем случае лучший способ найти, существует ли элемент уже, состоит в том, чтобы попытаться вставить его. insert функция членства для std::map возвраты std::pair<iterator, bool>. Успешно выполняется ли вставка или перестала работать, первый элемент пары укажет на требуемый объект (или Ваш новый или тот, который уже присутствовал). Можно затем изменить его значение, как Вы считаете целесообразным.

5
ответ дан Michael Kristofik 26 November 2019 в 22:53
поделиться

Проверьте правила на инициализацию.

раздел See 4.9.5 Инициализаций Прогр C++ Lang или книга станд. C++. В зависимости от того, является ли Ваша переменная локальной, статичной, пользовательской, или инициализация значения по умолчанию константы может произойти.

В Вас случай, интервал называют POD (Простой Тип данных). Любой автоматический (созданный на "куче" / локальная переменная) переменная POD не является инициализированным значением по умолчанию. Следовательно для Вас "i" выше не будет иметь нуля значения.

Всегда делают привычку к инициализации POD при определении в "куче". Можно даже использовать интервал () для инициализации значения.

1
ответ дан Ketan 26 November 2019 в 22:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: