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

Хеш функция - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как перевести из 4 сс в 8сс http://www.cyberforum.ru/cpp-beginners/thread674640.html
Всем привет пацаны! как написать программу на с++, для перевода чисел с 4 системы счисления в 8- ричную систему счисления?
C++ Поиск элементов массива в матрице Задача состоит в том, чтобы находить заданные с клавиатуры элементы массива в матрице(размер и содержание матрицы задаются с клавиатуры, но при этом подразумевается, что справа налево и снизу вверх элементы убывают) Вторую неделю мучаю этот код, ничего толкового не выходит... Укажите, где ошибки. # include <stdio.h> void main () { int n,m,j; printf("\n vvedite razmernost matrix n*m\n");... http://www.cyberforum.ru/cpp-beginners/thread674638.html
Бинаризация изображения C++
Необходимо написать программу на С++ : преобразование полутонового изображения в бинарное,используя метод Ниблэка. Есть пошаговое выполнение этого метода, но я не понимаю, как писать код.) Возможно кто то сможет помочь?)
Сравнение двух дисковых файлов C++
Здравствуйте, как написать функцию, которая сравнивает содержимое двух дисковых файлов и выдает сообщение, если есть хотя бы одно несовпадение. Имена файлов заданы в командной строке.
C++ Программирование графов http://www.cyberforum.ru/cpp-beginners/thread674609.html
Неподскажите сайт где очень понятно объясняют графы, как запрограммировать, и т.д. Просто гуглил но чо то мне не понравилось то, что он мне показал. Везде объясняют поверхностно. Заранее спаибо всем !
C++ Программа ввода с клавиатуры целых чисел Написать программу, обеспечивавшею ввод с клавиатуры целого положительного числа. При нажатии клавиши соответствующий символ должен появиться на экране только в том случае, если этот символ является цифрой. Функция должна позволять редактировать введенное число при помощи клавиши <Backspace> При нажатии клавиши <Enter> функция должна завершать работу и возвращать введенное число. Вот примерный... подробнее

Показать сообщение отдельно
MerlinLegend
1 / 1 / 0
Регистрация: 11.04.2011
Сообщений: 109
25.10.2012, 14:04  [ТС]     Хеш функция
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#include <iostream>
#include <string>
#include <list>
#include <algorithm>
 
// Класс "Идентификатор"
// Поскольку это только пример, то в данном случае является просто обёрткой над
// строкой. В реалиности может содержать много дополнительной информации, такой,
// как тип переменной, признак используемости, уровень вложенности и так далее.
class Identifier
{
public:
    // Задаётся имя переменной при создании
    Identifier(const std::string &name):
    m_name(name)
    {
    }
 
public:
    // Получается имя переменной
    std::string name() const
    {
        return m_name;
    }
    
private:
    std::string m_name;
};
 
// Необходимо для поиска переменной по имени
bool operator==(const Identifier &left, const Identifier &right)
{
    return left.name() == right.name();
}
 
// Функция, вычисляющая хэш
// Принимает идентификатор, хэш которого надо посчитать
// Возвращает вычисленный хэш
size_t hash(const Identifier& id)
{
    return size_t(id.name()[0]);
}
// Класс исключение "Идентификатор не найден"
// Нужен для выдачи сообщения о том, что идентификатор не найден в таблице,
// наружу функции поиска идентификатора
class IDNotFoundException : std::exception
{
public:
    IDNotFoundException(const std::string id_name):
    m_what(std::string("Identifier \'") + id_name + "\' not found!")
    {
    }
    
    virtual ~IDNotFoundException() throw()
    {
    }
    
public:
    const char *what() const throw()
    {
        return m_what.c_str();
    }
    
private:
    std::string m_what;
};
 
// Класс "Хэш-таблица", основанная на методе цепочек
// Метод цепочек заключается в следующем: таблица представляет собой массив
// связных списков фиксированного размера. Вычисленный хэш-функцией хэш является
// индексом в этом массиве списков. Известно, что список по этому индексу будет
// содержать все идентификаторы, для которых функция вернула одинаовый хэш.
// Осталось только найти идентификатор в данном списке и возвратить ссылку на
// него.
class HashTable
{
public:
   size_t collisions_count() const
{
    size_t result = 0;
    
    for (size_t i = 0; i < hasn_table_size; ++i)
        if (m_hash_table[i].size() > 1)
            ++result;
    
    return result;
}
public:
    // Добавление идентификатора в хэш-таблицу
    void add(const Identifier &id)
    {
        // Добавление идентификатора в список, расположенный в таблице по
        // индексу, вычисленному хэш-функцией (с учётом смещения)
        m_hash_table[hash(id) - min_hash_value].push_back(id);
    }
    
    // Поиск идентификатора в таблице по имени
    Identifier &get(const std::string &id_name)
    {
        // Сохраняется ссылка на список, в котором потенциально будет
        // расположен идентификатор (для простоты)
        std::list<Identifier>& line = m_hash_table[hash(id_name) - min_hash_value];
        
        // Поиск идентификаторы в списке по имени
        std::list<Identifier>::iterator it =
            std::find(line.begin(), line.end(), id_name);
        
        // Если при поиске были просмотренны все элементы списка,и ни один не
        // подошёл - сообщаем о том, что идентификатор не найден, посредством
        // исключения
        if (it == line.end())
            throw IDNotFoundException(id_name);
        
        // Если идентификатор найден - возвращаем ссылку на него
        return *it;
    }
    
private:
    // Хэш-таблица - массив связных списков идентификаторов
    std::list<Identifier> m_hash_table[hash_table_size];
};
 
int main()
{
    // Создаём хэш-таблицу
    HashTable ht;
    
    // Добавляем в неё различные идентификаторы
    ht.add(Identifier("a"));
    ht.add(Identifier("aa"));
    ht.add(Identifier("if"));
    ht.add(Identifier("fi"));
    
    // На случай, если идентификатор не будет найден, заворачиваем код поиска
    // идентификаторов в блок try/catch
    try
    {
        // Выводим на экран информацию о различных идентификаторах
        std::cout << ht.get("a").name() << std::endl;
        std::cout << ht.get("aa").name() << std::endl;
        std::cout << ht.get("if").name() << std::endl;
        std::cout << ht.get("fi").name() << std::endl;
        // Проверяем случай, когда идентификатор не должен быть найден
        std::cout << ht.get("hello").name() << std::endl;
    }
    catch (const IDNotFoundException &ex)
    {
        // Если идентификатор не найден - сообщаем об этом
        std::cerr << ex.what() << std::endl;
    }
    
    return 0;
}
 
Текущее время: 18:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru