Форум программистов, компьютерный форум 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> функция должна завершать работу и возвращать введенное число. Вот примерный... подробнее

Показать сообщение отдельно
silent_1991
Эксперт С++
4956 / 3032 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
25.10.2012, 18:58     Хеш функция
MerlinLegend, а, ну ё-моё, правильно. Вы зачем из кода что-то удаляли?

Добавлено через 49 секунд
Я же не говорил "замените объявление трёх полей класса на метод collisions_count". Я сказал "добавить в класс метод".

Добавлено через 1 минуту
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
#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:
    static const size_t min_hash_value = int('A') + int('0');
    static const size_t max_hash_value = int('z') + int('z');
    static const size_t hash_table_size = max_hash_value - min_hash_value;
    
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;
    }
    
    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;
    }
    
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
    {
        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;
}
Наслаждайтесь.

Добавлено через 1 минуту
М, вот ещё что. Размер хэш-таблицы тоже поменялся. Поэтому строки 59-60 надо заменить на такие:
C++
1
2
    static const size_t min_hash_value = int('0');
    static const size_t max_hash_value = int('z');
 
Текущее время: 18:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru