boost :: unordered_map中的operator []

时间:2012-11-29 04:11:23

标签: c++ boost operator-keyword lookup unordered-map

所以,我正在阅读以下网址上的boost :: unordered_map的文档:

http://www.boost.org/doc/libs/1_52_0/doc/html/boost/unordered_map.html#id1395195-bb

并且它表示operator []的效果和返回

效果: 如果容器尚未包含具有等于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 个答案:

答案 0 :(得分:4)

按照Yakk的建议将答案从帖子转移到答案。

所以,我解决了自己的问题并弄清楚其他人可能会从我的经验中获益或者有一些评论所以我还在发帖。

我认为发生的事情是它在我的地图中创建了一个新元素,只是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]

希望这可以帮助有需要的人。