Пытаюсь добавить в map элемент класса, выдает что нет подходящего конструктора. Вот пример кода (для примера взял структуру, но так же не работает и с классами). Если в качестве значения в map использовать базовый тип, то такой проблемы нету
struct Some {
int value;
explicit Some(int value) : value(value) {}
};
int main() {
map<char, Some> list;
Some x(10);
list['z'] = x;
}
Для использования типа данных 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);
Можно сделать так:
struct Some {
int value;
explicit Some(int value = 0) : value(value) {}
};
При обращении через оператор []
ему нужна возможность создания объекта по умолчанию - вот мы ее и предоставляем...
Или не пользуйтесь индексами, а вставляйте, скажем, так:
list.insert(make_pair('z',x));
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Никак не могу понять как на примере интерпретатора python можно расширять главный PyObject дополняя его методами и другими объектами не правя саму...
Требуется написать программу, которая из цифр двух натуральных чисел создает наименьшее возможное число, сохраняя при этом порядок следования...