оператор [] в boost :: unordered_map

Итак, я читал документацию для 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;
}

2

Решение

Перемещение моего ответа от поста к ответу, как предложил Якк.

Итак, я решил свою собственную проблему и понял, что другие могут извлечь пользу из моего опыта или получить некоторые комментарии, поэтому я все еще публикую.

Я думаю, что происходило то, что он создавал новый элемент на моей карте, просто 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]

Надеюсь, это поможет кому-то нуждающемуся.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]