Предыдущий пост -

4 способа удаления из hash_map.

Рубрика: C++, Дата: 26 June, 2013, Автор:

Приведите четыре разных способа удаления из hash_map “стертых” (erased) элементов. Используйте стандартный библиотечный алгоритм (параграф 3.8, глава 18) во избежания явного цикла.

Отут сложно что то сказать. Щас посмотрим хотябы, где оно реально удаляется.

От код который удаляет эти элементы:

size_type i=v.size();
		if(s<=b.size()) return;

		while(no_of_erased)//реально устраняет удаленные элементы
		{
			if(v[--i].erased)
			{
				v.erase(v.begin()+i);//передаем указатель
				--no_of_erased;
			}
		}

Здесь как мы видим просто идет обход всех элементов, перебор, и удаление элементов у которых erased будет установлен в true, в принципе неплохо сделано, как же мы можем еще лучше удалить эти элементы? Да кто его знает. Мне например нравится, то как здесь сделано.

Опять же мы эту задачку будем решать чисто на теоретическом уровне, я щас напишу код программы без испытания, поэтому возможно он будет работать неправильно. В примере цикл работает пока элементы не удалятся все, а мы просто поменяем условие, пока мы не обойдем все элементы, например такой цикл можно записать:

size_type i=v.size();
		if(s<=b.size()) return;

		for(int i=0;i<v.size();i++)//реально устраняет удаленные элементы
		{
			if(v[i].erased)
			{
				v.erase(v.begin()+i);//передаем указатель
				--no_of_erased;
			}
		}

Я ж все таки надеюсь в задании нужно как нибудь изменить цикл или хз, а вспомнил там нужно использовать стандартный алгоритм, ну ничего пропустим снова, раз так вышло, я пока что вообще алгоритмы не знаю, а чтобы мне решить эту задачку это головняк нужно еще и алгоритмы изучить, хотябы основные, их там 50 или 60 точно не помню, ладно пропустим пока эту задачу.

[youtube]http://www.youtube.com/watch?v=8-dLOvrGyyk[/youtube]

rss