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

Удалить эквивалентные пары из вектора пар при помощи стандартных алгоритмов - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ copy constructor operator= http://www.cyberforum.ru/cpp-beginners/thread338734.html
сижу я значит почитываю черновик будущего стандарта и вижу const C& C::operator=( const C& other) { if ( this != &other ) { this->~C(); new (this) C(other); } return *this; }
C++ А сколько у вас ушло времени на изучение C++ ??? Я понимаю, это зависит от человека....но все же:) http://www.cyberforum.ru/cpp-beginners/thread338725.html
Проект на С++ C++
Добрый день. МБ вопрос глупый. Как мне из своего проекта на Visual Studio сделать нормальное человеческое приложение? Т.е. не папка Project, ехе-файл с дурацкой иконкой, всякие файлы .cpp и .h которых в норм. приложениях я никогда не наблюдал. Попробую яснее, как сделать чтобы мой проект стал, ну вроде как скачиваеш какое нибудь приложение с инета, запускаеш единственный ехе, идет...
Двусвязный список - Error C2011: ElementsList: переопределение типа "struct" C++
Что я сделал не правильно? typedef struct ElementsList { struct ElementsList *Prev; struct ElementsList *Next; TiXmlElement *Cur; } ElementsList; Выдает ошибку: 1>c:\users\powerglory\documents\visual studio 2010\projects\wininet\spaces\getting.h(4): error C2011: ElementsList: переопределение типа "struct"
C++ как сделать так, чтоб если вводишь не цифры, а буквы он не выкидывал из программы, а выполнял команду http://www.cyberforum.ru/cpp-beginners/thread338672.html
Всем привет. Помогите. я начал программировать в С++ и спрогал калькулятор. вот код: #include <iostream> #include <cmath> using namespace std; int main (void) { long double num1, num2, num3; char num, choice, num4;
C++ Компиляторы с поддержкой стандарта C++ 2009 Учусь по книге C++ для чайников 6-ое изд В книге есть елементы стандарта С++ 09 А какие IDE(с компилятором) с поддержкой этого стандарта есть ????? поиск юзал :cry:не нашёл подробнее

Показать сообщение отдельно
Roof
 Аватар для Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393
03.08.2011, 17:25     Удалить эквивалентные пары из вектора пар при помощи стандартных алгоритмов
Цитата Сообщение от Kastaneda Посмотреть сообщение
но перед этим, естественно, вектор нужно отсортировать. Вот с сортировкой и возникла проблема - можно отсортировать либо по первым, либо по вторым элементом пар, а мне нужно, чтоб эквивалентные пары оказались соседними в векторе.
Есть подозрение, что таким способом отсортировать нереально, может подскажите другое решение?
Я так понял использовать функции с предикатами можно.
Чтобы эквивалентные пары оказались соседними в векторе можно использовать функцию
std::stable_sort с предикатом:
C++
1
2
3
4
5
typedef pair < int, int > elem;
...
bool comp_elem ( elem a, elem b ){
     return a.first==b.second && a.second==b.first;
}
Добавлено через 17 минут
поторопился, предикат вообще не нужен.
Просто std::stable_sort;

Вот мой вариант:
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <iostream>
#include <algorithm>
#include <utility>
#include <vector>
 
using namespace std;
 
#define NUM1 3
#define NUM2 8
typedef pair < int, int > elem;
 
//функция заполнения вектора
void fill_vec( vector < elem > &vec );
//функция печати вектора
void print_vec ( vector < elem > &vec );
 
int main() {
 
    vector < elem > my_vec ( 10 );
    //заполняем вектор
    fill_vec( my_vec );
    print_vec( my_vec );
 
    //сортируем вектор
    sort( my_vec.begin(), my_vec.end() );
    print_vec( my_vec );
 
    //сортируем так чтобы эквивалентные оказались рядом
    stable_sort( my_vec.begin(), my_vec.end() );
    print_vec( my_vec );
 
    //переносим уникальные элементы вначало вектора
    vector < elem >::iterator end_unique = unique( my_vec.begin(), my_vec.end() );
    print_vec( my_vec );
 
    //удаляем эквивалентные пары
    my_vec.erase( end_unique, my_vec.end() );
    print_vec( my_vec );
 
    return 0;
}
 
 
void fill_vec( vector < elem > &vec ){
    if (vec.size() == 0){
            cout << "Размер вектора равен 0! Невозможно заполнить!";
            return;
    }
 
    vector < elem >::iterator it = vec.begin();
        int n = 0;
        while ( it != vec.end() ){
            ++n % 2 ? (*it++ = make_pair( n, n )) : (*it++ = make_pair( NUM1 , NUM2 ));
        }
 
 
 
}
 
void print_vec ( vector < elem > &vec ){
 
    if (vec.size() == 0){
        cout << "Вектор пустой! Нечего печатать!";
        return;
    }
 
    vector < elem >::const_iterator it = vec.begin();
    while ( it != vec.end() ){
        cout << "( " << (*it).first << " " << (*it).second << " )  ";
        ++it;
    }
 
    cout << endl;
}
Подойдет?
 
Текущее время: 08:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru