Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/41: Рейтинг темы: голосов - 41, средняя оценка - 4.54
1 / 1 / 1
Регистрация: 01.07.2013
Сообщений: 127

Сортировка множества

14.08.2013, 18:51. Показов 8431. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задание в конце главы в книжке: Заполните массив четными числами, а множество — нечетными. С помощью алгоритма merge() объедините эти контейнеры в вектор. Выведите его содержимое, чтобы удостовериться, что слияние прошло успешно. Только вот множество не сортируется, а алгоритм merge требует сортировку. Думаю раз автор книги написал это значит есть какой то выход. Использовать copy не предлагайте.
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
25
26
#include <iostream>
#include <string>
#include <algorithm>
#include <set>
#include <functional>
#include <vector>
#pragma warning (disable:4786)
 
bool comp( int df,int dv)
{
    return  (df < dv)? true: false;
}
 
void main()
{
   setlocale( LC_ALL,"Russian" );
   int ne4et[]={1, 3, 5, 7, 9};
   set<int> iset(ne4et, ne4et+sizeof(ne4et)/sizeof(int));
   set<int>:: iterator iterSet;
   int chet[]={2, 4, 6, 8};
   vector<int > ivec(100);
   vector<int >::iterator iterVec;
  //  sort(iset.begin(), iset.end());
 //  sort(ne4et, ne4et+sizeof(ne4et)/sizeof(int));
 
   merge(iset.begin(), iset.end(), chet, chet+5, ivec.begin(), comp );
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.08.2013, 18:51
Ответы с готовыми решениями:

Число изъять из множества А, если оно является элементом множества А, но не является элементом множества В
Введено с клавиатуры число изъять из множества А, если оно является элементом множества А, но не является элементом множества В. ...

Множества. Вычислить количество элементов множества Q, связанного c исходными множествами
В общем задание звучит так : Заданы 3 упорядоченных множества F, G и H, представленные файлами f, g и h соответственно. Вычислить...

В матрицу записать 1, если удвоенный элемент первого множества меньше элемента второго множества
Здравствуйте! Не могу понять, где ошибка в коде... Пользователь вводит размер первого множества, элементы, затем размер второго...

18
249 / 219 / 63
Регистрация: 30.07.2013
Сообщений: 465
14.08.2013, 19:05
std::set всегда отсортирован, в этом его свойство.
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
14.08.2013, 19:06
std::set по определению хранит элементы уже отсортированными.
0
1 / 1 / 1
Регистрация: 01.07.2013
Сообщений: 127
14.08.2013, 19:22  [ТС]
Все равно так же ошибка Expression: sequence not oredered
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
14.08.2013, 19:32
А почему chet+5, а не +4?
1
1 / 1 / 1
Регистрация: 01.07.2013
Сообщений: 127
14.08.2013, 20:31  [ТС]
Цитата Сообщение от Somebody Посмотреть сообщение
А почему chet+5, а не +4?
Действительно, спасибо) не заметил

Добавлено через 29 минут
Цитата Сообщение от ArkTaS Посмотреть сообщение
Действительно, спасибо) не заметил
Зациклился на тексте ошибки что последовательность не отсортирована и не обратил внимания на диапазон)

Добавлено через 16 минут
А в чем ошибка в функциональном объекте comp что исп. для сравнения ?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
bool comp( int df,int dv)
{
    return  (df > dv)? true: false;
}
 
void main()
{
   setlocale( LC_ALL,"Russian" );
   int ne4et[]={1, 3, 5, 7, 9};
   set<int> iset(ne4et, ne4et+sizeof(ne4et)/sizeof(int));
   set<int>:: iterator iterSet;
   int chet[]={2, 4, 6, 8};
   vector<int > ivec(10);
   vector<int >::iterator iterVec;
 
   sort(ne4et, ne4et+sizeof(ne4et)/sizeof(int));
 
   merge(iset.begin(), iset.end(), chet, chet+sizeof(chet)/sizeof(int), ivec.begin(),comp );
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
14.08.2013, 21:13
Всё нормально с comp вроде. Только тут хватит просто return df > dv.
А вот main должен возвращать int.
0
1 / 1 / 1
Регистрация: 01.07.2013
Сообщений: 127
14.08.2013, 21:20  [ТС]
Цитата Сообщение от Somebody Посмотреть сообщение
Всё нормально с comp вроде. Только тут хватит просто return df > dv.
А вот main должен возвращать int.
Уже не должен, если df < dv то все работает если > то та же ошибка sequense not ordered
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
14.08.2013, 21:49
Цитата Сообщение от ArkTaS Посмотреть сообщение
Уже не должен
???
Цитата Сообщение от ArkTaS Посмотреть сообщение
если df < dv то все работает если > то та же ошибка sequense not ordered
А, ну так set-то тоже должен быть с сортировкой в таком же порядке. Если с этой comp, то типа такого:
C++
1
set<int, bool(*)(int, int)> iset(ne4et, ne4et+sizeof(ne4et)/sizeof(int), comp);
а вообще есть sts::less, std::greater.
0
1 / 1 / 1
Регистрация: 01.07.2013
Сообщений: 127
14.08.2013, 21:57  [ТС]
Цитата Сообщение от Somebody Посмотреть сообщение
Сообщение от ArkTaS
Уже не должен
???
Ну очень часто встречаю коментарии подобные твоему про return в main() и всегда им отвечают что уже делать это не нужно

Добавлено через 3 минуты
Цитата Сообщение от Somebody Посмотреть сообщение
а вообще есть sts::less, std::greater.
Не работают они ошибку выдает
include <functional> и using namespace std есть

Добавлено через 1 минуту
Цитата Сообщение от Somebody Посмотреть сообщение
если df < dv то все работает если > то та же ошибка sequense not ordered
А, ну так set-то тоже должен быть с сортировкой в таком же порядке. Если с этой comp, то типа такого:
Какой смысл в функц. объекте в merge если нельзя переопределить тип сортировки ?
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
14.08.2013, 22:01
Цитата Сообщение от ArkTaS Посмотреть сообщение
и всегда им отвечают что уже делать это не нужно
Ну, на заборах тоже много чего пишут...
http://www.open-std.org/jtc1/s... /n3337.pdf
Пункт 3.6.1.2
An implementation shall not predefine the main function. This function shall not be overloaded. It shall have a return type of type int, but otherwise its type is implementation-defined. All implementations shall allow both of the following definitions of main:
int main() { /* ... */ }
and
int main(int argc, char* argv[]) { /* ... */ }
Добавлено через 2 минуты
Цитата Сообщение от ArkTaS Посмотреть сообщение
Какой смысл в функц. объекте в merge если нельзя переопределить тип сортировки ?
merge - это слияние. Её задача - слить две отсортированных последовательности в одну отсортированную в один проход. Если же сортировка нужна какая-то другая, то тогда варианта лучшего, чем объединить всё в одну кучу и отсортировать, нет.
0
1 / 1 / 1
Регистрация: 01.07.2013
Сообщений: 127
14.08.2013, 22:18  [ТС]
Цитата Сообщение от ArkTaS Посмотреть сообщение
Ну очень часто встречаю коментарии подобные твоему про return в main() и всегда им отвечают что уже делать это не нужно

Добавлено через 3 минуты
Не работают они ошибку выдает
include <functional> и using namespace std есть

Добавлено через 1 минуту

Какой смысл в функц. объекте в merge если нельзя переопределить тип сортировки ?
в строке если добавить greater<int>
C++
1
   sort(ne4et, ne4et+sizeof(ne4et)/sizeof(int));
тоже работать не будет фз почему

Добавлено через 4 минуты
Цитата Сообщение от ArkTaS Посмотреть сообщение
в строке если добавить greater<int>
C++
1
   sort(ne4et, ne4et+sizeof(ne4et)/sizeof(int));
тоже работать не будет фз почему
Уже разобрался почему less greater не работали

Добавлено через 8 минут
Цитата Сообщение от Somebody Посмотреть сообщение
merge - это слияние. Её задача - слить две отсортированных последовательности в одну отсортированную в один проход. Если же сортировка нужна какая-то другая, то тогда варианта лучшего, чем объединить всё в одну кучу и отсортировать, нет.
Так он не хочет сортировать ! из 2-х строк 2, 4, 6, 8 и 1, 3, 5, 7, 9 он делает 1 2 3 4 5 6 7 8 9 0 это без указания функц. объекта если указать less то результат тот же, если поменять на greater то снова ошибка: sequence not ordered ! Поэтому не понимаю смысла наличия данного аргумента
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
14.08.2013, 22:20
Опять где-то размер на единицу больше у массива?
0
1 / 1 / 1
Регистрация: 01.07.2013
Сообщений: 127
14.08.2013, 22:26  [ТС]
Цитата Сообщение от Somebody Посмотреть сообщение
Опять где-то размер на единицу больше у массива?
Нет
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
25
26
27
28
29
30
31
32
void main()
{
   setlocale( LC_ALL,"Russian" );
   int ne4et[]={1, 3, 5, 7, 9};
   set<int> iset(ne4et, ne4et+sizeof(ne4et)/sizeof(int));
   set<int>:: iterator iterSet;
   int chet[]={2, 4, 6, 8};
   vector<int > ivec(10);
   vector<int >::iterator iterVec;
 
   cout<<endl;
     for(iterSet=iset.begin() ;iterSet!=iset.end(); iterSet++)  // Выводи множество нечетных чисел
   cout<<*iterSet<<' ';
 
 //  sort(chet, chet+sizeof(ne4et)/sizeof(int), greater<int>());   // Сортируем множество нечетных чисел
 
   cout<<endl;
     for(int i=0; i < sizeof(chet)/sizeof(int); i++)   // Выводим массив четных чисел
   cout << chet[i]<< " ";
 
   merge( chet, chet+sizeof(chet)/sizeof(int), iset.begin(), iset.end(), ivec.begin(), greater<int>());
 
   cout<<endl;
     for(iterVec=ivec.begin() ;iterVec!=ivec.end(); iterVec++) 
   cout<<*iterVec<<' ';
 
   cout<<endl;
 
 
   cout<<endl;
   system("pause");
}
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
14.08.2013, 22:35
C++
1
vector<int > ivec(10);
ivec[9] == 0

Добавлено через 2 минуты
C++
1
2
3
4
#include <iterator>
...
vector<int> ivec;
merge(chet, chet+sizeof(chet)/sizeof(int), iset.begin(), iset.end(), back_inserter(ivec), greater<int>());
0
1 / 1 / 1
Регистрация: 01.07.2013
Сообщений: 127
14.08.2013, 22:44  [ТС]
Somebody, та же ошибка
0
 Аватар для Kins
59 / 58 / 7
Регистрация: 03.02.2013
Сообщений: 167
24.08.2013, 15:37
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
#pragma warning (disable:4786)
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    int arr[]={2, 4, 6, 8, 10};
    int arr1[]={1, 3, 5, 7, 9};
    set<int> iSet(arr1, arr1+5);
    vector<int> iVector(10);
    vector<int>::iterator iter;
    merge(arr, arr+5, iSet.begin(), iSet.end(), iVector.begin());
    iter=iVector.begin();
    while(iter!=iVector.end())
        cout <<*iter++ <<" ";
    cout <<endl;
    system("pause");
    return 0;
}
1
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
24.08.2013, 16:02
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int _tmain(int argc, _TCHAR* argv[])
  {
  int array [] = { 5, 1, 3, 9, 7 };
  std::set<int> set;
  std::vector<int> vector;
  set.emplace(8);
  set.emplace(4);
  set.emplace(6);
  set.emplace(2);
  std::sort(std::begin(array),std::end(array));
  std::merge(std::begin(set),std::end(set),std::begin(array),std::end(array),std::back_inserter(vector));
  for (auto &x:vector)
    std::cout<<x<<" ";
  std::cout<<std::endl;
    return 0;
  }
2
 Аватар для Kins
59 / 58 / 7
Регистрация: 03.02.2013
Сообщений: 167
24.08.2013, 16:45
Добавлено через 43 секунды
Цитата Сообщение от Nekto Посмотреть сообщение
std::back_inserter(vector))
точно.)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int _tmain(int argc, _TCHAR* argv[])
{
    int arr[]={2, 4, 6, 8, 10};
    int arr1[]={1, 3, 5, 7, 9};
    set<int> iSet(arr1, arr1+5);
    vector<int> iVector;
    vector<int>::iterator iter;
    merge(arr, arr+5, iSet.begin(), iSet.end(), back_inserter(iVector));
    iter=iVector.begin();
    while(iter!=iVector.end())
        cout <<*iter++ <<" ";
    cout <<endl;
    system("pause");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.08.2013, 16:45
Помогаю со студенческими работами здесь

Квадрат с вершинами из первого множества накрывает все точки второго множества и имеет минимальную площадь
Даны два множества точек на плоскости. Выбрать четыре различных точки первого множества так, чтобы квадрат с вершинами в этих точках...

Множества. Проверка множества на наличие элемента в нем
Во многих задачах сталкиваюсь с одной и той же проблемой: Нужно создать множество элементов, добавлять в него новые элементы и проверять...

Множества . Найти разность полученного множества с заданным
Всем доброго времени суток! Необходима ваша помощь. Никак не могу сделать второй пункт задачи.Суть задачи-найти 1)объединение множества...

Удалить из множества А минимальный элемент множества В
Удалить из множества А минимальный элемент множества В. могу удалить из A все елементи B. а минимальний нет( #include...

Сформировать два множества, первое содержит все простые числа из данного множества, второе - все составные
Условие задачи следующее:Имеется множество, содержащее натуральные числа из некоторого диапазона. Сформировать два множества, первое из...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru