Im using the following structure:
hash_map<string, list<time_t>>
When I initially fill the hash map with the information I read from a text file, I have no problem inserting elements to those time_t lists.
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));
}
As you can see, if the key string is not in the table, I create a list with one time_t value and insert the pair on the table. On following apeareances of that same key, I just push the new time_t element on the already existing list and works fine.
I want to do the opposite now: erase elements of those lists.
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;
}
}
This code is not eliminating elements from those lists.
I suppose the problem starts on this line:
list<time_t> lista = (*it).second;
Does the variable lista have the same list I can get from the hash_map or a copy of it? If it is a copy, I undestand the reason it's not working. However, I still dont understand why it did work inserting elements.
(*it).second.push_front(fecha);
Is there a way of erasing elements from the list using an aproach similar to what I'm doing, or would I have to change the whole structure of the hash_map to something like
hash_map<string, list<time_t>*>
Thank you very much in advance