Форум программистов, компьютерный форум, киберфорум
Наши страницы

set_difference(vector<pair<int,int>>, vector<int>> - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Не работает strcat_s с strcpy_s http://www.cyberforum.ru/cpp-beginners/thread973259.html
strcat_s(strcpy_s(s3, sizeof(s1), s1),sizeof(s2), s2); Так не работает. strcpy_s(s3, sizeof(s1), s1); strcat_s(s3, sizeof(s2), s2); А так работает. Так как сделать, чтобы работало в одну строчку?...
C++ Range-based for Почему не работает данный цикл с динамически выделенным массивом? Подозреваю, что из-за фрагментированности кучи... но адресная арифметика с таким массивом прокатывает на ура. Насколько кривые... http://www.cyberforum.ru/cpp-beginners/thread973255.html
C++ Длинная арифметика(чтение и запись в файлы)
Во время выполнения программа вылетает с выдачей ошибки "Необработанное исключение по адресу 0x000B966F в longMult.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0x********." Никак не...
Разбор арифметических выражений C++
Задача на указатели из учебника Р.Лафоре. если вкратце, то суть заключается в том, что мы вводим строку без пробелов и скобок(например, 9+6/3) и на выходе получаем результат. //10-15.cpp #include...
C++ Для введенного с клавиатуры n, вывести фразу вида: «Мне 41 год» http://www.cyberforum.ru/cpp-beginners/thread973228.html
Для введенного с клавиатуры n, вывести фразу вида: «Мне 41 год», «Мне 16 лет», «Мне 84 года»...... switch Не могу понять что дальше, с остатком при делении не получается int nvoz(int n) {...
C++ Посоветуйте сайт или книгу где хорошо изложена информация о ШАБЛОНАХ КЛАССОВ Посоветуйте сайт или книгу где хорошо изложена информация о ШАБЛОНАХ КЛАССОВ До этого читал: 1) С.Прата "Язык программирования с++" (как то это тема раскрывается из далека временами не сильно... подробнее

Показать сообщение отдельно
gray_fox
What a waste!
1522 / 1227 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
11.10.2013, 02:51
Вот с find и erase примерно так, O(n*m)
C++
1
2
3
4
5
6
7
vec1.erase(
std::remove_if(
      std::begin(vec1), std::end(vec1)
    , [&] (std::pair<int, int> const& pair) {
           return std::find(std::begin(vec2), std::end(vec2), pair.first) != std::end(vec2);
      } 
    , std::end(vec1)));
Добавлено через 15 минут
Цитата Сообщение от mat_for_c Посмотреть сообщение
и как это сделать???
Как то так, на вскидку
C++
1
2
3
4
5
6
std::vector<std::pair<int, int>> difference;
boost::set_difference(
      vec1
    , vec2 | boost::adaptors::transformed([] (int const value) { return std::make_pair(value, int{}); })
    , std::back_inserter(difference));
std::swap(vec1, difference);
Добавлено через 27 минут

Не по теме:

Вроде бы казалось можно сделать так

C++
1
2
3
4
5
6
std::vector<std::pair<int, int>> difference;
std::set_difference(
      std::begin(vec1), std::end(vec1)
    , std::begin(vec2), std::end(vec2)
    , std::back_inserter(difference)
    , [] (std::pair<int, int> const& pair, int const value) { return pair.first < value; });
но, к сожалению, так нельзя; думаю с бустом то же самое, хотя не проверял...



Добавлено через 5 минут
Кстати, в случае find + erase: учитывая, что последовательность vec2 отсортирована, можно заменить линейный поиск на бинарный (binary_search), тогда сложность упадёт до O(n*log(m))
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.