簡體   English   中英

boost :: unordered_map中的運算符[]

[英]operator [] in boost::unordered_map

因此,我正在閱讀以下URL的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,mapd_type())

返回:對x.second的引用,其中x是容器中已經存在的元素,或者是新插入的具有等於k的鍵的元素

當我運行以下代碼時,它表明map [“ 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;
}

按照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]

希望這可以幫助需要幫助的人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM