Итак, я читал документацию для boost :: unordered_map по следующему адресу:
http://www.boost.org/doc/libs/1_52_0/doc/html/boost/unordered_map.html#id1395195-bb
и это говорит о том, что эффекты и результаты оператора []
Последствия:
Если контейнер еще не содержит элементов с ключом, эквивалентным k, вставляется значение std :: pair (k, mapped_type ())
Возвращает:
Ссылка на x.second, где x — элемент, уже находящийся в контейнере, или недавно вставленный элемент с ключом, эквивалентным k
Когда я запускаю следующий код, он показывает, что указатель на карту [«xyz»] равен 0. Что мне не хватает? Я вижу много людей, использующих find (key_value), но не был уверен, как это работает.
#import <iostream>
#import <boost/unordered_map.hpp>
class myClass
{
public:
myClass():_i(-1){};
myClass(int i):_i(i){};
int _i;
};
int main()
{
boost::unordered_map<std::string,myClass*> map;
map["abc"] = new myClass(1);
std::cout << map["abc"] << std::endl;
std::cout << map["xyz"] << std::endl;
return 0;
}
Перемещение моего ответа от поста к ответу, как предложил Якк.
Итак, я решил свою собственную проблему и понял, что другие могут извлечь пользу из моего опыта или получить некоторые комментарии, поэтому я все еще публикую.
Я думаю, что происходило то, что он создавал новый элемент на моей карте, просто rhs был myClass *. Я переписал это как
class myClass
{
public:
myClass():_i(-1){};
myClass(int i):_i(i){};
int _i;
friend std::ostream& operator<< (std::ostream& stream, const myClass& myClass){return stream << "[" << myClass._i << "]";}
};
int main()
{
boost::unordered_map<std::string,myClass> map;
map["abc"] = myClass(1);
std::cout << map["abc"] << std::endl;
std::cout << map["xyz"] << std::endl;
return 0;
}
и вот мой вывод:
$ g++ test.cpp && ./a.out
[1]
[-1]
Надеюсь, это поможет кому-то нуждающемуся.
Других решений пока нет …