Вставка карты C++ с использованием []

Я вижу, что код в подстрочный оператор, как это для std::map когда ключ не найден. Но здесь они добавляют значение по умолчанию.

__i = insert(__i, value_type(__k, mapped_type()));

Теперь, если я сделаю

std::map<std::string,int> mapped;
mapped["current"] = 5;

Я хотел знать, как эта пара добавляется на карту, используя приведенное выше утверждение.

1 ответ

operator[] вставляет элемент карты, если он не был найден, а затем возвращает его.

Поэтому ключ параметров (__i) и значение (__k) добавляются на карту.

Это одна реализация STL:

_Tp& operator[](const key_type& k) { // k is the parameter you passed

    iterator i = lower_bound(k);

    // if i -> first >= k then insert a place for the new element.
   if (i == end() || key_comp()(k, (*i).first))
       i = insert(i, value_type(k, _Tp()));

    // return a reference to the element mapped to by the key
    return i -> second;
 }

Поскольку ссылка возвращается, она действует точно так же, как и при доступе к массиву:

Вы можете назначить ray[5] = 10 и доступ int i = ray[5],

Другие вопросы по тегам