Im, используя следующую структуру:Удаления элементов из списка внутри hash_map
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