оператор [] в boost:: неупорядоченная карта
Итак, я читал документацию для 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;
}
1 ответ:
перемещаю свой ответ с поста на ответ, как предложил Якк.
Итак, я решил свою собственную проблему и понял, что другие могут извлечь выгоду из моего опыта или иметь некоторые комментарии, поэтому я все еще публикую.
Я думаю, что то, что происходило, было тем, что он создавал новый элемент в моей карте, просто 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]
Надеюсь, что это помогает кто-то нуждается.