Установить конструктор по умолчанию для элемента в unordered_map в случае оператора [] - PullRequest
0 голосов
/ 20 октября 2019

У меня есть этот класс:

class test_t {

public:

  int value;

  test_t() { }

  test_t(int _value) : value(_value) { }

};

Теперь у меня есть unordered_map со значением int в качестве ключа

std::unordered_map<int, test_t> map;

Когда я буду использовать оператор [], если ключон не существует, новый элемент будет добавлен к карте, вызывающей конструкцию.

test_t & test = map[0];

Теперь можно сказать unordered_map вызвать другой конструктор? то есть возможно ли сделать что-то подобное?

std::unordered_map<int, test_t(5)> map;

в том смысле, что каждый новый элемент будет создан с конструкцией со значением 5?

Я знаю, что могу создать конструкциюкак это:

test_t(int _value = 5) { }

однако проверка класса является лишь примером чего-то более сложного.

1 Ответ

1 голос
/ 20 октября 2019

[] operator значение инициализирует сопоставленное значение, если оно не нашло его и вы не можете его изменить. Вы можете изменить свой инициализатор по умолчанию. 1007 *, чтобы получить итератор для пары ключ-значение, и если итератор был end итератор, вставьте вашу пару ключ-значение.

При желании, как предложил @PaulMcKenzie, вы можете просто использовать insert , поскольку «он возвращает пару, состоящую из итератора, для вставленного элемента (или для элемента, который предотвратил вставку) иbool, обозначающий, имела ли место место вставка. "

m.insert({key, test_t(5)});
...