Страница 1 из 1

multimap

Добавлено: 2011-03-11 7:08:01
Гость
Здравствуйте.
Начал изучать С++ - подскажите может можно как то более изящно все это сделать?

Код: Выделить всё

get(std::multimap<std::string, msg>* msg_pool, std::string id_thread)
{
	typedef std::multimap<std::string, msg>::iterator iterator;
	std::pair< iterator, iterator > pos;
	std::pair< iterator, iterator > pos_old;
	

	pos = _pool.equal_range( id_thread );
	
	pos_old = pos;

	for (; pos.first != pos.second; pos.first++ )
	{
		msg_pool->insert(std::make_pair(pos.first->first, pos.first->second));
	}

	_pool.erase(pos_old.first, pos_old.second);

....................................................................

Re: multimap

Добавлено: 2011-03-11 13:24:51
Fastman
>>Начал изучать С++
и
>>typedef std::multimap<std::string, msg>::iterator iterator;

Плохо начал. Не усложняй себе жизнь.
И напиши для начала чего ты хочешь получить.

Re: multimap

Добавлено: 2011-03-11 15:05:43
Гость
Хочу из одной map перенести в другую, удовлетворяющие определенному условию

Re: multimap

Добавлено: 2011-03-30 16:22:02
Dambo
Нда прочитайте для начало описание того что вы используете... А именно по multimap и qual_range.
Вообще multimap хорош в кучах сортированных, в вашем коде вы перетаскиваете почему то 1 элемент и убиваете весь диапазон(думаю ваша ошибка)... если хотите так делать почему не vector?
Код который перетаскивает кучу удовлетворяющую ключу и грохает её:

Код: Выделить всё

get(std::multimap<std::string, msg>* msg_pool, std::string id_thread)
{
   typedef std::multimap<std::string, msg>::iterator iterator;
   std::pair< iterator, iterator > pos;   

   pos = _pool.equal_range( id_thread );

   msg_pool->insert(pos.first, pos.second);

   _pool.erase(pos.first, pos.second);

....................................................................
После erase, pos указывает на мусор перед употреблением его, надо присвоить другое ему, если он дальше по коду используется....