hash_map<string, list<time_t>>
當我最初填補了哈希映射我從一個文本文件中讀取信息,我沒有問題,插入元素那些time_t的名單。
hash_t::iterator it = hash.find(origen);
if (it != hash.end())
{
(*it).second.push_front(fecha);
}
else
{
list<time_t> lista(1, fecha);
hash.insert(make_pair(origen, lista));
}
正如你所看到的,如果密鑰字符串不是在表中,我創建一個time_t的值列表,並插入桌子上的一對。在跟蹤同一個關鍵的行爲時,我只是將新的time_t元素推到已經存在的列表上,並且工作正常。
我想現在做相反的事情:擦除這些列表的元素。
hash_t::iterator it = hash.find(origen);
if (it != hash.end())
{
list<time_t> lista = (*it).second;
list<time_t>::iterator it2 = lista.begin();
bool found = false;
while(it2 != lista.end() && !found)
{
time_t fecha2 = *it2;
if (abs((int) difftime(fecha, fecha2)) <= 2)
{
found = true;
lista.erase(it2);
}
else ++it2;
}
}
此代碼並未消除這些列表中的元素。
我想在這條線的問題開始:
list<time_t> lista = (*it).second;
是否變量LISTA具有相同的列表,我可以從的hash_map或它的一個副本得到什麼?如果它是一個副本,我不能理解它不起作用的原因。但是,我仍然不明白爲什麼它插入元素。
(*it).second.push_front(fecha);
有沒有使用類似於我在做什麼的形式給出擦除從列表中元素的方式,否則我將不得不到了hash_map的整體結構更改爲類似
hash_map<string, list<time_t>*>
非常感謝您提前
這工作得很好,只需添加&。但我仍然不明白爲什麼。現在我沒有列表的副本,而是一個引用(指針?)。那麼爲什麼我仍然可以做像lista這樣的事情。begin()而不是lista - > begin()? – Alex
它是:http://stackoverflow.com/questions/57483/what-are-the-differences-between-pointer-variable-and-reference-variable-in-c – Alex