Объект класса в качестве значения map

125
12 августа 2019, 00:50

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

struct Some {
    int value;
    explicit Some(int value) : value(value) {}
};
int main() {
    map<char, Some> list;
    Some x(10);
    list['z'] = x;
}
Answer 1

Для использования типа данных std::map с оператором [] этот тип должен поддерживать инициализацию по умолчанию. Ваш класс ее не поддерживает, о чем вам и сказал компилятор.

Чтобы вставлять в std::map данные, не поддерживающие инициализацию по умолчанию, у вас есть

Some x(10);
list.emplace('z', x);

или даже сразу

list.emplace('z', 10);

А еще лучше, начиная с C++17

list.try_emplace('z', x);
list.try_emplace('y', 10);
Answer 2

Можно сделать так:

struct Some {
    int value;
    explicit Some(int value = 0) : value(value) {}
};

При обращении через оператор [] ему нужна возможность создания объекта по умолчанию - вот мы ее и предоставляем...

Или не пользуйтесь индексами, а вставляйте, скажем, так:

list.insert(make_pair('z',x));
READ ALSO
Ошибка компиляции на месте вызова printf()

Ошибка компиляции на месте вызова printf()

Почему вот это работает,

118
Как расширять структуру / класс вне его / ее объявления?

Как расширять структуру / класс вне его / ее объявления?

Никак не могу понять как на примере интерпретатора python можно расширять главный PyObject дополняя его методами и другими объектами не правя саму...

93
Библиотека libxl не видит файл

Библиотека libxl не видит файл

Пытаюсь проверить работоспособность примера библиотеки libxl:

107
Из цифр двух натуральных чисел создать наименьшее возможное число, сохраняя порядок следования цифр

Из цифр двух натуральных чисел создать наименьшее возможное число, сохраняя порядок следования цифр

Требуется написать программу, которая из цифр двух натуральных чисел создает наименьшее возможное число, сохраняя при этом порядок следования...

119