【发布时间】:2012-06-23 21:05:02
【问题描述】:
我使用以下结构:
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>*>
非常感谢您
【问题讨论】: