[英]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.