int &HTable::operator[](const string &key){
int hashVal = hash(key);
list<City> citylist = _pht->at(hashVal);
std::list<City>::iterator it = citylist.begin();
for (; it != citylist.end(); it++){
std::cout << "came_inside" << endl;
City ob = (*it);
if (ob.city == key){
return ob.population;
}
}
City newcity(key,0);
citylist.push_front(newcity);
_pht->erase(_pht->begin() + hashVal);
_pht->insert(_pht->begin() + hashVal, citylist);
return newcity.population;
}
我的班級:數組下標運算符重載在C++
class HTable
{
public:
HTable(int);
int &operator[ ](const string &);
void print () const;
int size () const;
private:
int _size;
vector< list<City> > *_pht;
int hash(const string &) const;
};
我的問題是,當我嘗試使用此:
HTable fl_cities(n); // hash table with n lists
fl_cities["abcd"] = 1000;
fl_cities["abc"] = 111;
fl_cities["abcdefdf"] = 111;
cout << fl_cities["abc"] << endl; // return 0
cout << fl_cities["abcdefdf"] << endl; // return 0
cout << fl_cities["abcd"] << endl; // return 0
我沒有得到預期值,這表明0因爲我分配0然後返回值。它是假設返回指針,然後當我分配值應該去那裏,但它不起作用。
我已經試過這個簡單的int數組的運算符,它在這種情況下工作完美。但是在這個問題中,列表中的矢量不起作用。
原因在於你的'operator []'創建了一個'list',它是vector元素的副本,在該列表中創建一個'City'的副本,然後返回一個對成員的引用那個「城市」。這意味着你的'operator []'(以混淆的方式)返回一個臨時參考,當'main()'使用它時不會存在。這會導致未定義的行爲。 –
Peter