Member 11807654 Ответов: 1

Как добавить кортеж к существующим кортежам на карте?


привет, у меня есть список кортежей с именем " c "и карта списка кортежей с именем"map1". я хочу добавить кортежи списка к специальным элементам карты. например, я хочу добавить кортеж{1,2} в map1[0]. код, который я написал, выглядит следующим образом:
list<std::tuple<int, int>> l = list<std::tuple<int, int>>();
	auto it=c.begin();
	while(c.size()>k)
	{
		tuple<int, int> f=it._Ptr[0]._Myval;
		int seed=std::get<0>(f);
		int Dseed=std::get<1>(f);
	        Cmerge=find_nearest_group(Dseed);
		int Cnew= costof_new_group(Dseed,k);
		if(Cmerge<Cnew)
		{
			l.push_back(make_tuple(seed, Dseed));
			map1[PMerge] = l;
			c.remove(f);
		}
		else
		{
			create_new_group(seed,k);
			for(int i=0;i<k;i++)
			{				
				tuple<int, int> f=it._Ptr[0]._Myval;
			
				std::advance(it, 1);
				c.remove(f);
			}
		}
		
	}



проблема в том, что когда цикл while повторяется, "l" очищается, и он очищает кортежи, существующие в map, и заменяет новый Кортеж в элемент map. например, если кортежи существуют в map1[0] {3,2}, {4,5]}, а в следующем повторении Кортеж в l равен {3,6}, он заменит {3,2} и {4,5} на {3,6} в map1[0]. но я хочу добавить новый Кортеж к старым кортежам. как я могу решить эту проблему?

Что я уже пробовал:

я определил список "l" как глобальный, чтобы избежать ясности, но это не помогло

1 Ответов

Рейтинг:
1

SeattleC++

Я думаю, что ваша проблема заключается в утверждении map1[PMerge] = l;. Если map1[PMerge] уже имеет значение, он заменяет это значение вашим новым списком l. Вы не можете использовать подстрочную нотацию для этой проблемы. Вы должны использовать map:: find () и map::insert ().

find () возвращает итератор к элементу карты, который является парой<int, list>, или возвращает end (). Если итератор = = end (), то нужно добавить на карту пару<int, list>. Если итератор != end (), то он уже указывает на пару<int, list>. Вам нужно протолкнуть Кортеж в существующий список, заданный foundit- & gt;second.

auto foundit = map1.find(PMerge);
if (foundit == map1.end())
{
    map1.insert(make_pair(PMerge, l));
}
else
{
    foundit->second.push_back(make_tuple(seed, Dseed));
}