Я получил решение. Когда я указываю конечный объект place_id вместо lat lng, он показывает тот же результат, что и приложение Google Map. Я не знаю, как это работает. Такое изменение даже не упоминается в документации для разработчиков.
оператор [] похож на это:
Value& map<Key, Value>::operator[](const Key& key);
, Если Вы называете его с ключ , это еще не находится в карте, это будет конструкция по умолчанию новый экземпляр Значение , поместить его в карту под ключ , Вы передали в, и возвратите ссылку на него. В этом случае Вы имеете:
map<wstring,int> Scores;
Scores[wstrPlayerName]++;
Значение здесь интервал , и ints создаются из значения по умолчанию как 0, как будто Вы инициализировали их с [1 111] интервал () . Другие типы примитивов инициализируются так же (, например, , двойной () , длинный () , bool () , и т.д.).
В конце, Ваш код помещает новую пару (wstrPlayerName, 0) в карте, затем возвращает ссылку на интервал, который Вы затем увеличиваете. Так, нет никакой потребности протестировать, если элемент существует уже, если Вы хотите вещи запуститься от 0.
Этот будет конструкция по умолчанию новый экземпляр value
. Для целых чисел конструкция по умолчанию 0, таким образом, это работает, как предназначено.
Вы не должны тестировать, если объект существует прежде, чем увеличить его. [] оператор делает точно, что Вам нужен он, чтобы сделать, как сказали другие.
, Но что, если созданное из значения по умолчанию значение не работало бы на Вас? В Вашем случае лучший способ найти, существует ли элемент уже, состоит в том, чтобы попытаться вставить его. insert
функция членства для std::map
возвраты std::pair<iterator, bool>
. Успешно выполняется ли вставка или перестала работать, первый элемент пары укажет на требуемый объект (или Ваш новый или тот, который уже присутствовал). Можно затем изменить его значение, как Вы считаете целесообразным.
Проверьте правила на инициализацию.
раздел See 4.9.5 Инициализаций Прогр C++ Lang или книга станд. C++. В зависимости от того, является ли Ваша переменная локальной, статичной, пользовательской, или инициализация значения по умолчанию константы может произойти.
В Вас случай, интервал называют POD (Простой Тип данных). Любой автоматический (созданный на "куче" / локальная переменная) переменная POD не является инициализированным значением по умолчанию. Следовательно для Вас "i" выше не будет иметь нуля значения.
Всегда делают привычку к инициализации POD при определении в "куче". Можно даже использовать интервал () для инициализации значения.