оператор [] в 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 2

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]

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