C ++: Как инициализировать карту, которая содержит список указателей с заданным ключом? - PullRequest
2 голосов
/ 09 ноября 2019

Я занимаюсь практикой в ​​C ++ на основе структур данных.

Мой класс содержит атрибут, подобный этому map<int, list <Route *>>. У меня вопрос: что произойдет, когда я добавлю ключ на карту? Должен ли я инициализировать список или нет? Я хочу, чтобы в описании этого ключа был пустой файл.

Примерно так я и думал:

map<int, list<Route* > >::iterator it= _mapRoutesAirline.find(IDAirline);
        if(it == _mapRoutesAirline.end())
            _mapRoutesAirline[IDAirline] = list<Route*>(); 

Ответы [ 3 ]

1 голос
/ 10 ноября 2019

Да, вы можете просто присвоить элементу карты (синтаксис, предполагающий C ++ 11 или выше):

 _mapRoutesAirline[IDAirline] = {};

Обратите внимание, что во многих случаях использования у вас нет назначить пустой список, потому что любая попытка получить доступ к ключу, которого еще нет на карте, автоматически создаст созданный по умолчанию список для этого ключа, который является пустым списком. Это означает, что, например, _mapRoutesAirline[42] вернет пустой список, если вы еще ничего не присвоили _mapRoutesAirline[42].

1 голос
/ 09 ноября 2019

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

if(it == _mapRoutesAirline.end())
    _mapRoutesAirline.insert(std::make_pair(IDAirline, list<Route*>{})); 
0 голосов
/ 10 ноября 2019

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

_mapRoutesAirline[IDAirline] = {};

Кроме того, вам не нужно определять итератор, чтобы найтии вставить элемент Это можно сделать следующим образом:

if(_mapRoutesAirline.find(IDAirline) == _mapRoutesAirline.end()){
       _mapRoutesAirline[IDAirline] = {};
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...