【问题标题】:C++: How initialize a map that contains a list of pointers with a given key?C ++:如何初始化包含具有给定键的指针列表的映射?
【发布时间】:2020-03-06 01:51:02
【问题描述】:

我正在做基于数据结构的 C++ 练习。

我的班级包含类似map<int, list <Route *>> 的属性。我的问题是,当我向地图添加键时会发生什么。我必须初始化列表吗?我希望在该键的描述中有一个空文件。

我的想法是这样的:

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

【问题讨论】:

  • 对不起,它是一个整数! _mapRoutesAirline[IDAirline] = list&lt;Route*&gt;(); 是正确的编码方式吗?
  • 我写了一个答案。 _mapRoutesAirline[IDAirline] 查找 IDAirline,如果它不在地图中,则插入,否则修改旧值。我建议改用插入

标签: c++ list dictionary stl key


【解决方案1】:

定义新键时可以创建一个空列表,无需定义列表的数据类型。

_mapRoutesAirline[IDAirline] = {};

另外,你不需要定义一个迭代器来查找和插入元素 可以这样实现

if(_mapRoutesAirline.find(IDAirline) == _mapRoutesAirline.end()){
       _mapRoutesAirline[IDAirline] = {};
}

【讨论】:

  • 是的,我最后都这样编码了。谢谢!
【解决方案2】:

是的,您可以简单地分配给 map 元素(语法假设 C++11 或更高版本):

 _mapRoutesAirline[IDAirline] = {};

请注意,在许多用例中,您必须分配一个空列表,因为任何访问地图中不存在的键的尝试都会自动创建一个默认构造的列表对于那个键,它是一个空列表。这意味着,例如,如果您尚未为 _mapRoutesAirline[42] 分配任何内容,_mapRoutesAirline[42] 将返回一个空列表。

【讨论】:

    【解决方案3】:

    是的,您可以在地图中添加一个空列表作为值,例如:

    if(it == _mapRoutesAirline.end())
        _mapRoutesAirline.insert(std::make_pair(IDAirline, list<Route*>{})); 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 2017-01-08
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多