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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
mat_for_c
161 / 156 / 33
Регистрация: 26.04.2013
Сообщений: 702
Завершенные тесты: 2
#1

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

09.10.2013, 20:23. Просмотров 961. Ответов 15
Метки нет (Все метки)

Мне бы провести эту операцию по первому значению pair. Это реально сделать через STL или придется самому написать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2013, 20:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос set_difference(vector<pair<int,int>>, vector<int>> (C++):

Как считать данные в vector<pair<int, pair<int, int>>> arr(m) ? - C++
Здравствуйте! Помогите, как считать данные данные в массив такого типа? vector&lt;pair&lt;int, pair&lt;int, int&gt;&gt;&gt; arr(m) Пытался вот так...

Error LNK2019: unresolved external symbol "public: __thiscall Vector<int>::Vector<int>(int,int,int)" (?0?$Vec - C++
Вот есть заголовочный файл // Заголовочный файл Vector.h #ifndef VECTOR_H #define VECTOR_H #include &lt;iostream&gt; using...

Применить accumulate к vector<pair<int, int>> - C++
Привет. Как можно применить accumulate к vector&lt;pair&lt;int, int&gt;&gt;?

error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall Vector<int>::Vector<int>(void)" (?0?$Vector@H@@QAE@XZ) в функции _main - C++
//Vector.h #include &lt;iostream&gt; #include &lt;Windows.h&gt; #include &lt;climits&gt; #include &lt;vector&gt; #include &lt;stdlib.h&gt; #include &lt;fstream&gt;...

Как можно увеличить размер вектора, который является элементом вектора vector<vector<int>>arr(n, vector <int>) - C++
Написал программу, которая создает вектор 'а' векторов 'b', вектора 'b' содержат 2 числа. Стало интересно, как нужно изменить программу...

vector < vector < pair<int,int> > > g - C++
Подскажите как мне считать файл *.txt- 2 7 3 9 6 14 1 7 4 15 3 10 .................. где числа идут парами( (2,7),(3,9),(6,14) ) в...

15
Somebody
2791 / 1602 / 147
Регистрация: 03.12.2007
Сообщений: 4,197
Завершенные тесты: 1
09.10.2013, 20:55 #2
Даже если будешь сам писать, как же ты собираешься определить отношения на смешанном множестве pair/int?
vector{pair{1, 0}, pair{1, 1}} - vector{1}} = ???
0
mat_for_c
161 / 156 / 33
Регистрация: 26.04.2013
Сообщений: 702
Завершенные тесты: 2
09.10.2013, 21:04  [ТС] #3
Цитата Сообщение от Somebody Посмотреть сообщение
vector{pair{1, 0}, pair{1, 1}} - vector{1}} = ???
результатом должен быть пустой вектор
0
newbie666
Заблокирован
09.10.2013, 21:06 #4
что ты хочешь делать этой операцией?
0
mat_for_c
161 / 156 / 33
Регистрация: 26.04.2013
Сообщений: 702
Завершенные тесты: 2
09.10.2013, 21:15  [ТС] #5
Цитата Сообщение от Somebody Посмотреть сообщение
как же ты собираешься определить отношения на смешанном множестве
попробую "наклепать" ...

Добавлено через 5 минут
Цитата Сообщение от newbie666 Посмотреть сообщение
что ты хочешь делать этой операцией?
есть вектор vec1. в нем находятся некие пары. сами пары строятся так: (некое значение, его индекс). сам vec1 будет меняться (через erase), поэтому мне нужны индексы.

по поводу set_diff: грубо говоря нужно просмотреть в vec1 все некие значения с вектором vec2, и получается найти разность множеств, удалив при этом нужные элементы из vec1.
0
newbie666
Заблокирован
09.10.2013, 21:37 #6
учись пока я жив
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
std::vector<std::pair<int,int>> vec1;  //value, index
vec1.push_back(std::make_pair(4,1));
vec1.push_back(std::make_pair(5,2));
vec1.push_back(std::make_pair(6,3));
 
std::vector<int> vec2;
vec2.push_back(3);
vec2.push_back(6);
vec2.push_back(7);
 
for(auto it=vec2.begin(); it != vec2.end(); it++)
{
    auto found = std::find_if(vec1.begin(),vec1.end(),
        [&](const std::pair<int,int> item){return item.first == *it;});
    if(found != vec1.end())
        vec1.erase(found);
}
В результате пара с первым значением 6 сотрётся из vec1, т.к. она есть в vec2

P.S.: выполнять операции, в том числе и сравнивать, с разнотипными элементами нельзя, то есть твой первый пост не прокатит
1
Somebody
2791 / 1602 / 147
Регистрация: 03.12.2007
Сообщений: 4,197
Завершенные тесты: 1
09.10.2013, 21:38 #7
Цитата Сообщение от mat_for_c Посмотреть сообщение
результатом должен быть пустой вектор
Если было два равных элемента, а во втором множестве один такой, то один в результате останется. Так что даже если там везде одни int'ы будут, это уже не set_difference
0
mat_for_c
161 / 156 / 33
Регистрация: 26.04.2013
Сообщений: 702
Завершенные тесты: 2
09.10.2013, 21:47  [ТС] #8
Цитата Сообщение от newbie666 Посмотреть сообщение
учись пока я жив
тогда вопрос: [&] - что обозначает?
0
newbie666
Заблокирован
09.10.2013, 22:04 #9
Цитата Сообщение от mat_for_c Посмотреть сообщение
тогда вопрос: [&] - что обозначает?
[] - это обозначает начало лямбда выражения, а [&] обозначает начало лямбда выражения, внутри которого будет доступ к внешним переменным
1
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
09.10.2013, 23:31 #10
Если вдуг есть boost.range, то
C++
1
boost::set_difference(vectorOfPairs | boost::adaptors::map_keys, vectorOfValues, outputIterator);
0
mat_for_c
161 / 156 / 33
Регистрация: 26.04.2013
Сообщений: 702
Завершенные тесты: 2
11.10.2013, 01:21  [ТС] #11
Цитата Сообщение от gray_fox Посмотреть сообщение
Если вдуг есть boost.range
что-то не хочет...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <vector>
#include <utility>
#include <boost/range/algorithm/set_algorithm.hpp>
#include <boost/range/adaptors.hpp>
 
using namespace std;
 
void main() 
{
   vector<pair<int,int>> vec1;  //value, index
   vec1.push_back(make_pair(4,1));
   vec1.push_back(make_pair(5,2));
   vec1.push_back(make_pair(6,3));
 
   vector<int> vec2;
   vec2.push_back(3);
   vec2.push_back(6);
   vec2.push_back(7);
 
   vector<pair<int,int>> res;
   boost::set_difference(vec1 | boost::adaptors::map_keys, vec2, vec1.begin());
 
   system("pause");
}
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
11.10.2013, 01:30 #12
mat_for_c, так ты пишешь в первый вектор, который хранит pair, а не int.

Добавлено через 3 минуты
+ ты бы затирал значения в vec1 в процессе, в итоге получилось бы непонятно что...
0
mat_for_c
161 / 156 / 33
Регистрация: 26.04.2013
Сообщений: 702
Завершенные тесты: 2
11.10.2013, 01:37  [ТС] #13
Цитата Сообщение от gray_fox Посмотреть сообщение
который хранит pair
ну мне и надо этот вектор урезать...

и потом:
C++
1
boost::set_difference(vec1 | boost::adaptors::map_keys, vec2, vec2.begin());
поменял... в итоге в vec2 = [ 4 5 6 ]

Добавлено через 4 минуты
а если
C++
1
boost::set_difference(vec2, vec1| boost::adaptors::map_keys, vec2.begin());
то все нормально, только надо другой вектор урезать...
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
11.10.2013, 01:50 #14
Цитата Сообщение от mat_for_c Посмотреть сообщение
то все нормально, только надо другой вектор урезать...
Это не будет работать правильно.
Вообще я по названию темы смотрел - std::set_difference работает так же, как и из boost, только вот штук наподобее map_keys в std нет...
Можно писать во временный вектор, потом swap. Либо делать как ранее писали с find и erase, но там сложность будет уже не O(n + m), как у set_difference.
0
mat_for_c
161 / 156 / 33
Регистрация: 26.04.2013
Сообщений: 702
Завершенные тесты: 2
11.10.2013, 02:02  [ТС] #15
Цитата Сообщение от gray_fox Посмотреть сообщение
Можно писать во временный вектор
и как это сделать???
0
11.10.2013, 02:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.10.2013, 02:02
Привет! Вот еще темы с ответами:

Нюансы синтаксиса: что означает запись vector<int*> a и vector <int>*a ? - C++
Часто встречается вот такая запись: vector&lt;int&gt; a; это понятно что. Массив объектов int А вот что такое vector&lt;int*&gt; a; ...

Std::vector<std::pair<std::vector<int>::iterator, std::vector<int>::iterator> - C++
Вопрос по вектору. Допустим есть вектор, std::vector&lt;int&gt; vec; на каком - то этапе заполнения я ставлю закладку итератора, ...

Ошибка [Linker error] undefined reference to `Vector::Vector(int)' - C++
Добрый день. Делал по методички, и почему-то валятся ошибки... файл lab9_main.cpp #include &lt;iostream&gt; #include &quot;Vector.h&quot; int...

vector<Struct2{int,vector<struct1>}> или множественное наследование ... - C++
Здравствуйте! Помогите, пожалуйста. Есть такие данные: typedef struct { int x; int y; // координаты...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru