#c #unordered-map
#c #неупорядоченная карта
Вопрос:
Когда я объявляю неупорядоченную карту, то по умолчанию всем значениям присваивается значение 0. Но я хочу присвоить всем значениям значение -1. Есть ли какой-нибудь способ сделать это?
Например, смотрите этот код
#include <iostream>
#include <unordered_map>
using namespace std;
unordered_map<int, int> umap;
int main()
{
cout<<umap[10];
}
Результат этого кода равен 0. Посмотрите, что неназначенное местоположение по умолчанию выдает значение 0. Мой вопрос в том, есть ли какой-нибудь способ изменить это и назначить номер, который мне нравится?
Комментарии:
1. Осторожно:
umap[10]
фактически вставляется в карту, если элемент не существует. Ваша строка cout изменяет карту.2. ^ то, что говорит @spectras, — это целая проблема. В вашем примере нет «всех значений». Как только вы пишете
umap[10]
, вы создаете значение на карте. Поскольку вы не присваиваете значение, используется конструктор по умолчанию. Если бы вы написали что-то подобноеcout<<umap[10]=-1;
, это было бы по-другому.3. При доступе
umap[10]
и отсутствии экземпляра не был найден, тогда вводится элемент, созданный по умолчанию (значение-).unordered_map<int,int>
Так будет всегда0
. Вы можетеint
заменить класс, совместимый сint
конструкторами по умолчанию-1
, но не уверен, разумно ли это.
Ответ №1:
Вы можете создать пользовательский тип с конструктором по умолчанию для инициализации -1
:
struct MyInt
{
int i = -1;
};
unordered_map<int, MyInt> umap;
Вы можете предоставить operator int()
и другие операторы для имитации поведения обычного int
, если вы не хотите вводить средство .i
доступа.