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

STL std::set, std::pair, std::make_pair - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Распараллеливание программы http://www.cyberforum.ru/cpp-beginners/thread157205.html
Пишу брутер и встал вопрос о добавление многопоточности. Вот у меня есть функция: std::string wbfunc(std::string& hash) { std::string line; std::ifstream f("/home/hromjo/d"); while (std::getline(f, line)) { if (md5(line) == hash) { return line;
C++ Обработка кнопки У меян есть вот такая идея!я решил написать небольшую программку куда пользователь будет вводить свой майл и свой пароль потом при нажатии на клавишу данные будут сохраняться в файл,вот все что я написал это сделать легко а вот как сделать что при нажатии тот файл передался мне на мыло по инету? http://www.cyberforum.ru/cpp-beginners/thread157125.html
C++ Квадрат числа
Как сделать чтобы квадрат находился напротив числа??? #include <windows.h> #include <iostream> using namespace std; void main () { SetConsoleOutputCP(1251); //Квадрат первых десяти положительных чисел. cout<<"\t\t Таблица квадратов."<<endl;
Нужен пример перехвата API функции на Detours!!! C++
В долгих поисках пришел к выводу использовать Detours для отлова пакетов. Где можно найти рабочий исходник отлова какой-нибудь функции (желательно Send/Recv)?
C++ Программа в OpenCL http://www.cyberforum.ru/cpp-beginners/thread156513.html
Братцы, сроки поджимают и нужно закончить программульку одну. В общем, делал-делал и пришёл я к тупику на данном этапе... не знаю, что и делать. Изначально программа должна была высчитывать с помощью ЦПУ корень из числа. На выходе получается большое отрицательное число. Помогите пожалуйста исправить ошибки. #include <stdafx.h> #include <CL/cl.h>
C++ Ввод массива Помогите пожалуйста с вводом массива неизвестного размера. например мне надо ввести набор чисел 186146. И вывести. Пробовал sizeof, не получается подробнее

Показать сообщение отдельно
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
04.08.2010, 02:58     STL std::set, std::pair, std::make_pair
Я не знаю как описать тему в двух словах, поэтому не обращайте внимание на название темы.
Собственно перейдем к нашим баранам: есть пользовательский класс (условно дерево):
C++
1
2
3
4
5
6
7
8
9
    class tree {
        double age, height;
        std::string name;
    public:
        tree(std::string);
        bool operator == (tree);
        bool operator > (tree);
        bool operator < (tree);    
    };
На его основе строится еще один класс (лес):
C++
1
2
3
4
5
6
7
    class forest {
        int x, y;
        std::set<std::pair<tree, std::pair<int, int> > > list;
    public:
        forest(int, int); // кроме конструктора еще куча функций
        void addTree(std::string);
    };
Все как-бы хорошо, но вот этот метод:
C++
1
2
3
4
5
6
    void forest::addTree(std::string Name){
        tree newTree(Name);
        std::pair<int, int> position = std::make_pair(rand()%this->x, rand()%this->y);
        std::pair<tree, std::pair<int, int> > newElement(newTree,position);
        this->list.insert(newElement);
    }
Вопреки всему отказывается работать. Работаю в VS 2008 Express, компилятор выдает ошибку:
1> c:\program files\microsoft visual studio 9.0\vc\include\utility(87) : error C2678: binary '<' : no operator found which takes a left-hand operand of type 'const test::tree' (or there is no acceptable conversion)
1> e:\work\проект nautilus\test.hpp(38): could be 'bool test::tree::operator <(test::tree)'

Перейдя по первой ссылку получаем следующий код из хедера utility:
C++
1
2
3
4
5
6
7
8
template<class _Ty1,
    class _Ty2> inline
    bool operator<(const pair<_Ty1, _Ty2>& _Left,
        const pair<_Ty1, _Ty2>& _Right)
    {   // test if _Left < _Right for pairs
    return (_Left.first < _Right.first ||  // курсор становиться на эту строку
        !(_Right.first < _Left.first) && _Left.second < _Right.second);
    }
К чему это ума не приложу, так как у меня не пара пар, а пара класса и пары.
По поводу второй строки: у меня классы расположены в пространстве имен "test" и оформлены в виде:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
namespace test {
    class tree {/* Описания я буду опускать, что-бы показать саму структуру */};
    // собственно конструктор, и все функции оформлены в том-же виде
    tree::tree(std::string Name = ""){
        this->incA = 1 / 12;
        this->incH = 0.24;
        this->name = Name;
    }
    bool tree::operator < (tree a){
        return this->height < a.getHeight();
    }
    class forest {/* Описания я буду опускать, что-бы показать саму структуру */};
    // а вот и проблемный метод
    void forest::addTree(std::string Name){
        tree newTree(Name);
        std::pair<int, int> position = std::make_pair(rand()%this->x, rand()%this->y);
        std::pair<tree, std::pair<int, int> > newElement(newTree,position);
        this->list.insert(newElement);
    }
};
Так вот, судя по ошибке нужно-было прописать доступ к пространству имен и только потом извлекать метод из класса, но это странно, так как его описание находиться непосредственно внутри пространства имен и по сути он имеет прямой доступ ко всему что находится внутри того пространства имен, в котором он находится.
Вот только в чем проблема не понимаю а ошибки сами по себе не деваются.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 02:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru