Форум программистов, компьютерный форум 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:не нашёл подробнее

Показать сообщение отдельно
Сыроежка
Заблокирован
05.08.2011, 16:38     Удалить эквивалентные пары из вектора пар при помощи стандартных алгоритмов
Цитата Сообщение от Сыроежка Посмотреть сообщение
Интересно, а какова содержательная часть проблемы, которая привела к появлению этой подзадачи. Из чего вы образовывали пары и в связи с чем? Кстати сказать, у вас также будут удаляться и совпадающие значения пар { 3, 3 }, { 3, 3 }, так как они удовлетворяют вашему условию.

Что касается предиката сортировки, то он прост

C++
1
2
3
4
5
6
7
8
9
10
11
struct pair_less : public
   std::binary_function<const std::pair<int, int> &,
                        const std::pair<int, int> &,
                        bool>
{
   bool operator ()( const std::pair<int, int> &a,
                     const std::pair<int, int> &b ) const
   {
      return ( std::min( a.first, a.second ) < std::min( b.first, b.second ) );
   }
};
Только я сделал по невнимательности ошибку, а меня никто не подправил! Поэтому решил возвратиться к этому вопросу. У класса
C++
1
std::pair
есть свой определенный оператор '<'. Он записывается примерно следующим образом (пишу по памяти):

C++
1
2
3
4
5
6
7
template <typename T1, typename T2>
 
bool operator <( const std::pair<T1, T2> &a, std::pair<T1, T2> &b )
{
   return ( ( a.first < b.first ) ||
              ( !( b.first < a.first ) && ( a.second < b.second ) ) );
}
В исходной задаче можно рассматривать пары для сортировки как будто бы значение члена класса x.first равно std::min( x.first, x.second ), а значение x.second равно std::max( x.first, x.second ). То есть тем самым мы приводим все пары к одному виду, напоминающем дроби, когда значение в числители всегда меньше равно значению в знаменателе.

Тогда для сортировки предикат можно написать следующим образом

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
template <typename T>
struct pair_less : public
   std::binary_function<std::pair<T, T>, std::pair<T, T>, bool>
{
   bool operator ()( const std::pair<T, T> &a,
                     const std::pair<T, T> &b ) const
   {
      return
      ( ( std::min( a.first, a.second ) < std::min( b.first, b.second ) ) ||
        ( !( std::min( b.first, b.second ) < std::min( a.first, a.second ) ) &&
          ( std::max( a.first, a.second ) < std::max( b.first, b.second ) ) );
   }
};
[/QUOTE]


Вот сейчас логика будет правильная.
 
Текущее время: 14:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru