Как построить объект из списка пар инициализатора? - PullRequest
4 голосов
/ 07 апреля 2019

В этом коде я пытаюсь инициализировать объект класса, используя initializer_list пары (int, pair (строка, строка)), но получаю ошибку при инициализации члена класса map2 типа map (int, pair (строка, строка))).

Вот мой код

#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 Ответ

5 голосов
/ 07 апреля 2019

Элементы карты имеют 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"}},
};
...