Как установить значение неупорядоченной карты на число, отличное от 0

#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 доступа.