Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2018, 13:56   #1
SadiQ228
Пользователь
 
Регистрация: 30.10.2017
Сообщений: 66
По умолчанию Std::multimap

парни моя задача:
multimap1 = {1,2 3,4 5,6 7,6}
multimap2 = {3,4 5,6}

задача удалить из multimap1 все элементы multimap2 я понимаю что это делается двумя циклами for но чет не могу никак сделать чтобы работало
Код:
typedef multimap<int, int>::iterator iterator;
    std::pair<iterator, iterator> iterpair;
    for (multimap <int, int> ::iterator it = this->TEST.begin(); it != this->TEST.end(); ++it)
    {
        for (multimap <int, int> ::iterator jt = this->vCROSS.begin(); jt != this->vCROSS.end(); ++jt)
        {
            if (it->first == jt->first && it->second == jt->second)
            {
                iterpair = TEST.equal_range(jt->first);
                iterator del = iterpair.first;
                for (; del != iterpair.second; ++it) 
                {
                    if (del->second == jt->second) 
                    {
                        TEST.erase(del);
                        break;
                    }
                }
            }
        }
    }
пишет ошибку итератора но я его уже и так и сяк двигал
SadiQ228 вне форума Ответить с цитированием
Старый 30.11.2018, 14:02   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Начнем я начала:
Цитата:
Сообщение от SadiQ228 Посмотреть сообщение
задача удалить из multimap1 все элементы multimap2
Удалять по ключам? По значениям? При равенстве обоих?
p51x вне форума Ответить с цитированием
Старый 01.12.2018, 15:42   #3
SadiQ228
Пользователь
 
Регистрация: 30.10.2017
Сообщений: 66
По умолчанию

при равенсвте обоих

multimap1 = {1,2 3,4 5,6 7,6}
multimap2 = {3,4 5,6}


rezult = {1,2 7,6}
SadiQ228 вне форума Ответить с цитированием
Старый 01.12.2018, 16:34   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

1. Вы в курсе, что такое map? Почему вы их упорно пишите массивами?
2. std::erase_if если компилятор свежий
3. Набросал код:
Код:
	for (auto& el : b)
	{
		auto It = a.equal_range(el.first);
		for (auto I = It.first; I != It.second;)
			if (I->second == el.second)
				I = a.erase(I);
			else
				++I;
	}

Последний раз редактировалось p51x; 01.12.2018 в 17:02.
p51x вне форума Ответить с цитированием
Старый 01.12.2018, 17:25   #5
SadiQ228
Пользователь
 
Регистрация: 30.10.2017
Сообщений: 66
По умолчанию

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

Последний раз редактировалось SadiQ228; 01.12.2018 в 19:06.
SadiQ228 вне форума Ответить с цитированием
Старый 01.12.2018, 20:55   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Сообщение от SadiQ228 Посмотреть сообщение
я понимаю что map это грубо говоря бинарное дерево элемент которого хранятся в памяти не обязательно по порядку
map в первую очередь ассоциативный контейнер из отсортированных пар. Что там будет в реализации - красно-черное дерево или хэш-таблица уже детали.

Цитата:
Сообщение от SadiQ228 Посмотреть сообщение
но какая разница если итератор возвращает индекс?
А как же вы этот индекс разыменовываете?

Цитата:
Сообщение от SadiQ228 Посмотреть сообщение
и даже если удаляет что то, и мы больше это что то не разыменовываем, то все должно быть хорошо.
Подумайте над ++I после удаления...
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не дает добавить в std::multimap SadiQ228 Общие вопросы C/C++ 1 29.11.2018 06:06
Вопрос по std::shared_ptr и std::thread Shadowfirst Visual C++ 2 13.09.2017 07:55
Что означает строка в коде: std::ofstream fs(name, std::ios::binary); egorsavenkov Помощь студентам 1 07.11.2016 12:45
std::cout уменьшает время выполнения программы. std::thread aako Visual C++ 0 13.11.2015 16:59
ошибка: no match for ‘operator<<’ in ‘std::operator<< [with _Traits = std::char_traits<char> Critter Общие вопросы C/C++ 5 08.08.2010 23:38