Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.
Например, ниже - класс ученика, который будет использовать его в нашем коде.
public class Student {
private int id;
public int getId() {
return this.id;
}
public setId(int newId) {
this.id = newId;
}
}
Приведенный ниже код дает вам исключение с нулевым указателем.
public class School {
Student obj_Student;
public School() {
try {
obj_Student.getId();
}
catch(Exception e) {
System.out.println("Null Pointer ");
}
}
}
Поскольку вы используете Obj_Student
, но вы забыли инициализировать его, как в правильном коде, показанном ниже:
public class School {
Student obj_Student;
public School() {
try {
obj_Student = new Student();
obj_Student.setId(12);
obj_Student.getId();
}
catch(Exception e) {
System.out.println("Null Pointer ");
}
}
}
При использовании C++ 11 у Вас есть доступ к <unordered_map>
и <unordered_set>
заголовки. Они обеспечивают классы std::unordered_map
и std::unordered_set
.
при использовании C++ 03 с TR1 у Вас есть доступ к классам std::tr1::unordered_map
и std::tr1::unordered_set
, с помощью тех же заголовков (если Вы не используете GCC, в этом случае заголовки <tr1/unordered_map>
и <tr1/unordered_set>
вместо этого).
Во всех случаях, существуют соответствующий unordered_multimap
и unordered_multiset
типы также.
Если у Вас уже нет unordered_map или unordered_set, они - часть повышение .
Вот документация для оба .
Существует объект hash_map, как многие здесь упомянули, но это не часть stl. Это - расширение SGI, поэтому при поиске чего-то в STL я думаю, что Вы являетесь неудачливыми.
Visual Studio имеет класс stdext::hash_map
в заголовке <hash_map>
, и gcc имеет класс __gnu_cxx::hash_map
в том же заголовке.
См. станд.:: hash_map от SGI.
Это включено в распределение STLPort также.
hash_map также поддерживается в GNU libstdc ++ .
Dinkumware также поддержки это, что означает, что много реализаций будет иметь hash_map (я думаю, даже Visual C++ поставляет с Dinkumware).
Если Вы имеете расширения TR1 в наличии для yor компилятора, используйте тех. В противном случае boost.org имеет версию, это весьма схоже за исключением станд.:: пространство имен. В этом случае вставьте объявление использования, таким образом, можно переключиться на станд.:: позже.
станд.:: tr1:: unordered_map, в <unordered_map>
если Вы не имеете tr1, получаете повышение и используете повышение:: unordered_map в <boost/unordered_map.hpp>