Допустим у меня есть следующий код:
#include <string>
#include <map>
struct A {
const int value;
A(int value) : value{value} {}
};
int main() {
A a{3};
std::map<std::string, A> myMap;
myMap["Hello"] = a; // Error: Copy assignment operator of 'A' is implicitly deleted
// because field 'value' is of const-qualified type 'const int'.
return 0;
}
В данном случае я не могу перегрузить `operator=`
Мне нужно следующее поведение.
1. Поле
const int value
- константно всегда. Никаких трюков чтобы его изменить.
2. std::map должен содержать значения.
3. Если ключ отсутствует, то должна создаваться пара ключ-значение в
map
.
4. Если ключ существует, то заменить значение.
5. Никаких конструкторов по умолчанию, в случае отсутствия ключа. Доступ к словарю, с использованием ключа, которого нет, должно вызывать исключение или остановку или еще что-то.
В общем как я понимаю надо создать обертку над
std::map
? Хотелось бы такого поведения достичь стандартными средствами
std::map
. Что вы предложите?