带有 std::map 初始化列表的构造函数

问题描述 投票:0回答:1

按照不从 this question 扩展 std 容器的建议,我正在创建自己的类型并使用

std::map
作为类属性。

我正在从 std::map 重新创建我想要的公共接口函数,将它们转发到类属性。 如何指定采用初始值设定项列表作为参数的构造函数?我正在使用地图

第一次尝试使用

initializer_list<pair<int, vector<int>>

class IdParentingMap
{
public:
   using DataMap = std::map<int, std::vector<int>>;
   using DataMapIt = DataMap::iterator;
   using DataMapConstIt = DataMap::const_iterator;

   IdParentingMap();
   IdParentingMap(std::initializer_list<std::pair<int, std::vector<int>>> initList);

   DataMapConstIt findParentIt(const int id) const;

   /** Forwards from std::map  **/

   std::size_t size() const;
   DataMapIt end();
   DataMapConstIt end() const;

private:
   DataMap data;
};

IdParentingMap::IdParentingMap(initializer_list<pair<int, vector<int>>> initList)
  : data(initList)
{
}

给了我(来自编译器):

在构造函数中 ‘IdParentingMap::IdParentingMap(std::initializer_list >)’:IdParentingMap.cpp:13:5:错误:没有匹配 调用‘std::map的函数

::map(std::initializer_list >&)’ 13 | :数据(初始化列表) | ^~~~~~~~~~~~~~

第二次尝试使用

initializer_list<pair<int, initializer_list<int>>

class IdParentingMap
{
public:
   using DataMap = std::map<int, std::vector<int>>;
   using DataMapIt = DataMap::iterator;
   using DataMapConstIt = DataMap::const_iterator;

   IdParentingMap();
   IdParentingMap(std::initializer_list<std::pair<int, std::initializer_list<int>>> initList);

   DataMapConstIt findParentIt(const int id) const;

   /** Forwards from std::map  **/

   std::size_t size() const;
   DataMapIt end();
   DataMapConstIt end() const;

private:
   DataMap data;
};

IdParentingMap::IdParentingMap(initializer_list<pair<int, initializer_list<int>>> initList)
  : data(initList)
{
}

给了我(来自编译器):

在构造函数中 ‘IdParentingMap::IdParentingMap(std::initializer_list>)’:IdParentingMap.cpp:13:5:错误:否 调用‘std::map的匹配函数

::map(std::initializer_list >&)’ 13 | :数据(初始化列表)

c++ std stdmap initializer-list
1个回答
0
投票

当模仿另一个类的接口时,我发现最简单的方法是做出与原始类中相同的类型定义,然后在成员函数中使用这些定义。示例:

class IdParentingMap {
public:
    using DataMap = std::map<int, std::vector<int>>;
    using value_type = DataMap::value_type; // use the the original typedef(1)

    IdParentingMap(std::initializer_list<value_type> initList);
//                                       ^^^^^^^^^^
};
  1. 请注意,原始类型定义是
    std::pair<const Key, T>
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.