如何从对的初始值设定项列表构造对象?

Posted

技术标签:

【中文标题】如何从对的初始值设定项列表构造对象?【英文标题】:How to construct object from initializer list of pairs? 【发布时间】:2019-04-07 02:23:08 【问题描述】:

在这段代码中,我尝试使用对(int,pair(string,string))的 initializer_list 初始化类对象,但在初始化 map(int,pair(string,string)类型的类成员 map2 时出错)。

这是我的代码

#include <iostream>
#include <string>
#include <initializer_list>
#include <map>
using namespace std;

class contact
private:

        map <int,pair<string,string>> map2;

public:

    contact(initializer_list<pair<int,pair<string,string>>> m):map2(m)
    void display()
        for (const auto& it:map2)
            cout<<it.first;
        
    
;

int main() 
    contact obj
        make_pair(4,make_pair("parul","agrawal")),
        make_pair(5,make_pair("keshav","agrawal")),
    ;

    obj.display();
    return 0;

【问题讨论】:

【参考方案1】:

地图元素有const 键。

改变

contact(initializer_list<pair<int, pair<string, string>>> m) : map2(m) 

contact(initializer_list<pair<const int, pair<string, string>>> m) : map2(m) 

顺便说一句,你也可以放弃make_pair()

contact obj

    4, "parul", "agrawal",
    5, "keshav", "agrawal",
;

【讨论】:

以上是关于如何从对的初始值设定项列表构造对象?的主要内容,如果未能解决你的问题,请参考以下文章

构造函数初始值设定项列表中长度未知的数组

为啥 C# 3.0 对象初始值设定项构造函数括号是可选的?

为啥在使用大括号初始值设定项列表时首选 std::initializer_list 构造函数?

TypeScript是否支持带有对象初始值设定项的构造函数?

C++ 不能用初始值设定项列表初始化非聚合错误

对象初始值设定和集合初始值设定