Форум программистов, компьютерный форум CyberForum.ru

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); А так работает. Так как сделать, чтобы работало в одну строчку? И что это вообще за приставка _s, то есть я понимаю, что это значит безопасная функция, но она привязана к компилятору и будет работать только в windows?
C++ Range-based for Почему не работает данный цикл с динамически выделенным массивом? Подозреваю, что из-за фрагментированности кучи... но адресная арифметика с таким массивом прокатывает на ура. Насколько кривые руки? :) http://www.cyberforum.ru/cpp-beginners/thread973255.html
C++ Длинная арифметика(чтение и запись в файлы)
Во время выполнения программа вылетает с выдачей ошибки "Необработанное исключение по адресу 0x000B966F в longMult.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0x********." Никак не могу увидеть ошибку. #include<iostream> #include<cstring> #include<fstream> #define MAX 2500 int main() {
Разбор арифметических выражений C++
Задача на указатели из учебника Р.Лафоре. если вкратце, то суть заключается в том, что мы вводим строку без пробелов и скобок(например, 9+6/3) и на выходе получаем результат. //10-15.cpp #include <iostream> #include <cstring> using namespace std; const int MAX = 40; const int LEN = 80; class Stack
C++ Для введенного с клавиатуры n, вывести фразу вида: «Мне 41 год» http://www.cyberforum.ru/cpp-beginners/thread973228.html
Для введенного с клавиатуры n, вывести фразу вида: «Мне 41 год», «Мне 16 лет», «Мне 84 года»...... switch Не могу понять что дальше, с остатком при делении не получается int nvoz(int n) { switch(n) { case 1: {cout << "Mne" << n << "god" << endl; break;}
C++ Посоветуйте сайт или книгу где хорошо изложена информация о ШАБЛОНАХ КЛАССОВ Посоветуйте сайт или книгу где хорошо изложена информация о ШАБЛОНАХ КЛАССОВ До этого читал: 1) С.Прата "Язык программирования с++" (как то это тема раскрывается из далека временами не сильно понятно); 2) Г.Шилд "Полный справочник по с++" (только азы но классно изложено все ясно и понятно); подробнее

Показать сообщение отдельно
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
11.10.2013, 02:51     set_difference(vector<pair<int,int>>, vector<int>>
Вот с 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))
 
Текущее время: 11:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru