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

Шаблоны. Древовидная сортировка - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Ошибка в программе http://www.cyberforum.ru/cpp-beginners/thread749778.html
Здравствуйте! Решал одну задачу. И возникла проблема при выводе результата в файл. Не могу понять, что не так, не могу понять почему не работает. Немного подправил, все равно не работает. Помогите пожалуйста разобраться. //----------------- #include <fstream> #include <string> using namespace std; ifstream cin("input.txt"); ofstream cout("output.txt"); string s, st; int h, i, j, k, pos;...
C++ Одномерные массивы. Поиск последовательностей Помогите с задачей !!! в с++ Объявить массив целых чисел и заполнить его случайными значениями. Рзмерность массива – 100, диапазон значений . Во всех последовательностях положительных чисел изменить порядок элементов на противоположный. http://www.cyberforum.ru/cpp-beginners/thread749769.html
Подсветка синтаксиса в Emacs C++
Скажите пожалуйста, как в Emacs сделать автоматическую подсветку кода С++ в файлах с расширением .h - там только C, а в файлах .cpp все нормально.
C++ Нахождение всех неотрицательных чисел, стоящих на четных местах в последовательности
=-O
C++ Составить алгоритм нахождения суммы наибольшего и наименьшего из заданных чисел http://www.cyberforum.ru/cpp-beginners/thread749744.html
:(:(
C++ составить алгоритм инвертирования ряда чисел , т.е. записи всех чисел заданного ряда в обратном порядке :cry: подробнее

Показать сообщение отдельно
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4925 / 2668 / 243
Регистрация: 29.11.2010
Сообщений: 7,422
02.01.2013, 22:06  [ТС]     Шаблоны. Древовидная сортировка
Последний момент остался. С обычными типами все нормально работает, с std:air<std::string, Test *> ругается.

Класс Test
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
class Test
{
    public:
        Test(); // конструктор по-умолчанию
        Test(int, const std::string &, int ); // аргументированный конструктор
        . . .
    protected:
        int day_;
        std::string month_;
        int year_;
};

tree_sort.h
Кликните здесь для просмотра всего текста
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
#ifndef _TREE_SORT_H_
#define _TREE_SORT_H_
#include <vector>
#include <iterator>
 
template <typename T>
struct Tree
{
    T a;
    Tree* left;
    Tree* right;
};
 
template <class Tree, typename T, class Compare>
Tree* add_to_tree(Tree* root, T new_value, Compare comp)
{
    if (!root)
    {
        root = new Tree;
        root->a = new_value;
        root->left = root->right = 0;
        return root;
    }
 
    if (comp(root->a, new_value))
        root->right = add_to_tree(root->right, new_value, comp);
    else
        root->left  = add_to_tree(root->left,  new_value, comp);
    return root;
}
 
template <class Tree, typename T>
void tree_to_vec(Tree* root, std::vector<T> &v)
{
    if (!root) return;
    tree_to_vec(root->left, v);
    v.push_back(root->a);
    tree_to_vec(root->right, v);
    delete root;
}
 
template <class Tree, class InputIterator, class Compare>
Tree* add(InputIterator begin, InputIterator end, Compare comp)
{
    Tree* root = 0;
    for (; begin != end; ++begin)
        root = add_to_tree(root, *begin, comp);
    return root;
}
 
template <typename T, class Compare>
void tree_sort(std::vector<T> &v, Compare comp)
{
    std::vector<T> u;
    tree_to_vec(add<Tree<T>,
        typename std::vector<T>::iterator>(v.begin(), v.end(), comp), u);
    v = u;
}
 
#endif

место вызова функции сортировки:
C++
1
2
3
typedef std::vector<std::pair<std::string, Test *> > myVec;
myVec v;
tree_sort(v, LessDate());
Объект-функция LessDate
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
bool LessDate::operator()(const pair<string, Test *> &p1,
                          const pair<string, Test *> &p2)
{
    if (p1.second->getYear() == p2.second->getYear())
    {
        if (p1.second->getMonth() == p2.second->getMonth())
            return p1.second->getDay() < p2.second->getDay();
        else
            return p1.second->getMonth() < p2.second->getMonth();
    }
    else
        return p1.second->getYear() < p2.second->getYear();
}


Добавлено через 1 минуту
Текст ошибок:
Кликните здесь для просмотра всего текста
Код
)\tree_sort.h|47|  required from 'Tree* add(InputIterator, InputIterator, Compare) [with Tree = Tree<std::pair<std::basic_string<char>, Test*> >; InputIterator = __gnu_cxx::__normal_iterator<std::pair<std::basic_string<char>, Test*>*, std::vector<std::pair<std::basic_string<char>, Test*> > >; Compare = LessDate]'|
)\tree_sort.h|55|  required from 'void tree_sort(std::vector<T>&, Compare) [with T = std::pair<std::basic_string<char>, Test*>; Compare = LessDate]'|
)\Program.cpp|254|  required from here|
)\tree_sort.h|7|warning: 'Tree<std::pair<std::basic_string<char>, Test*> >::a' should be initialized in the member initialization list [-Weffc++]|
)\tree_sort.h|7|warning: 'Tree<std::pair<std::basic_string<char>, Test*> >::left' should be initialized in the member initialization list [-Weffc++]|
)\tree_sort.h|7|warning: 'Tree<std::pair<std::basic_string<char>, Test*> >::right' should be initialized in the member initialization list [-Weffc++]|
)\tree_sort.h|19|note: synthesized method 'Tree<std::pair<std::basic_string<char>, Test*> >::Tree()' first required here |
||=== Build finished: 4 errors, 3 warnings ===|
 
Текущее время: 12:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru