Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 02.10.2016
Сообщений: 17
1

Описать класс "хэш-таблица", используя unordered_set и заданную хэш-функцию

03.12.2016, 21:23. Просмотров 1445. Ответов 8
Метки нет (Все метки)

Здравствуйте. Есть класс объектов и ключ сравнения:
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
#pragma once
 
#include <iostream>
#include <vector>
#include <list>
#include <iterator>
#include <time.h>
#include <fstream>
using namespace std;
 
 
int int_randomize100()
{
    return (100*(double)rand()/(RAND_MAX+1));
}
 
class Tovar
{
    int kod_tovara;//ключ
    int nomer_sklada;
    char name_tovara [20];
    int data_postup;
    int srok_hran;
    int kolvo_tovara;
    int price;
 
public:
    Tovar ()
    {
        /*kod_tovara = NULL;
        nomer_sklada = NULL;
        srok_hran = NULL;
        *name_tovara = NULL;
        data_postup = NULL;
        kolvo_tovara = NULL;
        price = NULL;*/
    }
    Tovar ( int kod_t, int nomer_skl, int srok_hr, char *f, int data_post, int kolvo_tov,   int p)
    {
        kod_tovara = kod_t;
        nomer_sklada = nomer_skl;
        srok_hran = srok_hr;
        strcpy_s (name_tovara ,f);
        data_postup = data_post;
        kolvo_tovara = kolvo_tov;
        price = p;
    }
    Tovar ( char * f)
    {
        kod_tovara = int_randomize100();//ключ
        nomer_sklada = int_randomize100();
        srok_hran = int_randomize100();
        strcpy_s( name_tovara, f);
        data_postup = int_randomize100();
        kolvo_tovara= int_randomize100() ;
        price= int_randomize100();
    }
    int operator % ( int n)
    {
        return (*this).kod_tovara%n;
    }
    friend bool operator == ( const Tovar ob, const Tovar to);
    friend ostream& operator<<(ostream &stream,Tovar ob);
    friend istream& operator >> ( istream & stream, Tovar ob);
};
 
bool operator == ( const Tovar ob, const Tovar to)
{
    if ( ob.kod_tovara == to.kod_tovara ) return true;
    else return false;
}
 
    ostream& operator<<(ostream &stream,Tovar ob)
    {
        stream << "\nДанные платежа:\n\n" << "Код товара: " << ob.kod_tovara << "\nНомер склада: " << ob.nomer_sklada << 
                "\nДата поступления: " << ob.data_postup << "\nНазвание товара: " << ob.name_tovara  << "\nСрок хранения: " << ob.srok_hran <<
                "\nКоличество товара: " << ob.kolvo_tovara << "\nЦена: " << ob.price << endl;
            return stream;
    }
 
    istream& operator >> ( istream & stream, Tovar ob)
    {
        stream >> ob.kod_tovara >> ob.nomer_sklada >> ob.data_postup >> ob.name_tovara >> ob.srok_hran >> ob.kolvo_tovara >> ob.price;
        return stream;
    }
и некоторая хэш-функция сортирующая по остатку от деления введенного значения (n):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class MyHash
{
    int m;
  public:
          MyHash(){}
      MyHash(int n)
      {
          m=n;
      }
 
    size_t operator()(const int &a) const
    {
        return(a%m);
    }
 
};
Собственно сама проблема: нужно как-то описать класс "хэш-таблица" через unordered_set и заданную хэш-функцию, который будет работать с интами и объекатми моего класса, подскажите, пожалуйста, как? Методы добавления, удаления, поиска и вывода всех элементов должны быть
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.12.2016, 21:23
Ответы с готовыми решениями:

Хэш таблица
Подскажите, пожалуйста, как сделать хэш-таблицу в которой у каждого элемента есть шесть...

Хэш-таблица
Дана строка произвольного размера. Необходимо найти все повторяющиеся фрагменты максимальной длины....

Хэш-таблица
Задание реализовать динамическую хеш-таблицу с открытой адресацией для хранения строк (операции...

Хэш таблица
Как работает метод цепочек, для разрешения коллизий в хэш таблице?

8
6912 / 5977 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
03.12.2016, 21:51 2
Tovar в unordered_set?
1
0 / 0 / 0
Регистрация: 02.10.2016
Сообщений: 17
03.12.2016, 21:59  [ТС] 3
Цитата Сообщение от nmcf Посмотреть сообщение
Tovar в unordered_set?
Да, ключ по которому сортировать указал
0
Комп_Оратор)
Эксперт по математике/физике
8472 / 4228 / 577
Регистрация: 04.12.2011
Сообщений: 12,621
Записей в блоге: 14
03.12.2016, 23:06 4
Цитата Сообщение от psycho9661 Посмотреть сообщение
проблема: нужно как-то описать класс "хэш-таблица" через unordered_set и заданную хэш-функцию, который будет работать с интами и объекатми моего класса
Дело в том, что unordered_set это и есть хэш-таблица с цепочной адресацией. Она реализована как шаблон и перегружая хеш-функцию для своего класса его вполне можно использовать. Встроенные типы можно обрабатывать при помощи той, что в коробке.
Проблема, собственно, не ясна.
Цитата Сообщение от psycho9661 Посмотреть сообщение
Да, ключ по которому сортировать указал
Сортировать что? Ключ это индентификатор. Он проверяется на равенство, но обычно не подходит для сравнения на больше-меньше. Соответственно хеш-таблы это не упорядочиваемые структуры.

Добавлено через 17 минут
Цитата Сообщение от psycho9661 Посмотреть сообщение
ключ по которому
может Вы имеете ввиду "чего с ним делать?".
Аналогичный случай уже имел место быть:
Цитата Сообщение от история о ключе
Черепаха Тортилла и Буратино долго экспериментировали, но он никому не подошёл. Потом пришла Мальвина и рассказала о каморке, холсте и тайной дверце.
Как я понял (у меня 11 нету) нужно конкретизировать шаблон hash<T> для Вашего типа. Его надо реализовать как функтор, то есть перегрузить оператор (). А уже в нём - берёте Ваш ключ kod_tovara и делаете с ним например то, что что делали черепаха и деревянный сорванец. Или что-то ещё. То есть на Ваше усмотрение.

Добавлено через 27 минут
Цитата Сообщение от nmcf Посмотреть сообщение
Tovar в unordered_set?
пикантность в том, что если это код товара, действительно, то он одинаков у всей партии и практически одинаков для данного товара как позиции, на сколько я понимаю. Если да, то Буратино и черепаха, ещё легко отделались.
0
0 / 0 / 0
Регистрация: 02.10.2016
Сообщений: 17
04.12.2016, 11:33  [ТС] 5
Цитата Сообщение от IGPIGP Посмотреть сообщение
Дело в том, что unordered_set это и есть хэш-таблица с цепочной адресацией. Она реализована как шаблон и перегружая хеш-функцию для своего класса его вполне можно использовать. Встроенные типы можно обрабатывать при помощи той, что в коробке.
Проблема, собственно, не ясна.

Сортировать что? Ключ это индентификатор. Он проверяется на равенство, но обычно не подходит для сравнения на больше-меньше. Соответственно хеш-таблы это не упорядочиваемые структуры.

Добавлено через 17 минут

может Вы имеете ввиду "чего с ним делать?".
Аналогичный случай уже имел место быть:

Как я понял (у меня 11 нету) нужно конкретизировать шаблон hash<T> для Вашего типа. Его надо реализовать как функтор, то есть перегрузить оператор (). А уже в нём - берёте Ваш ключ kod_tovara и делаете с ним например то, что что делали черепаха и деревянный сорванец. Или что-то ещё. То есть на Ваше усмотрение.

Добавлено через 27 минут

пикантность в том, что если это код товара, действительно, то он одинаков у всей партии и практически одинаков для данного товара как позиции, на сколько я понимаю. Если да, то Буратино и черепаха, ещё легко отделались.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
template <typename T>
hash<T>
{
    int m;
  public:
      hash()
      {}
      hash(int n)
      {
          m=n;
      }
 
    size_t operator()(const int &a) const
    {
        return(a%m);
    }
};
так? у меня ведь значения интовые все будут, что для чисел, что для класса
0
sourcerer
04.12.2016, 11:41
  #6
 Комментарий модератора 
psycho9661, пожалуйста, прочитайте правила форума.
Особое внимание обратите на пункт 4.3 (порядок именования тем).
0
Комп_Оратор)
Эксперт по математике/физике
8472 / 4228 / 577
Регистрация: 04.12.2011
Сообщений: 12,621
Записей в блоге: 14
04.12.2016, 13:10 7
Цитата Сообщение от psycho9661 Посмотреть сообщение
так? у меня ведь значения интовые все будут, что для чисел, что для класса
Для встроенных типов уже всё есть. Но если Вы считаете, что нужно, то сделайте и для int.
А как, - Ваш вопрос. Я думаю, что как бы ни было реализовано в конкретной библиотеке, оно будет тем жизнерадостней чем распределение хеш-значений по черепахам будет равномернее. А это Вам лучше знать. А нам лучше не знать.
0
0 / 0 / 0
Регистрация: 02.10.2016
Сообщений: 17
04.12.2016, 13:17  [ТС] 8
Цитата Сообщение от IGPIGP Посмотреть сообщение
Для встроенных типов уже всё есть. Но если Вы считаете, что нужно, то сделайте и для int.
А как, - Ваш вопрос. Я думаю, что как бы ни было реализовано в конкретной библиотеке, оно будет тем жизнерадостней чем распределение хеш-значений по черепахам будет равномернее. А это Вам лучше знать. А нам лучше не знать.
Спасибо за наводящие ответы, но будь у меня достаточный уровень знания написания программ, я бы не создавал эту тему) Возможно ли часть кода написать? Для вас это 5 минут времени. Заранее спасибо.
0
Croessmah
04.12.2016, 15:07     Описать класс "хэш-таблица", используя unordered_set и заданную хэш-функцию
  #9
 Комментарий модератора 
Создана тема в разделе фриланса.
Тема закрыта.
0
04.12.2016, 15:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.12.2016, 15:07
Привет! Вот еще темы с ответами:

Хэш-таблица
Ребят, помогите, пожалуйста, решить задачу: Хэш-функция определена как h(k) = k mod 11. Вводится...

Хэш таблица
Может кто вкратце объяснить её суть, естестно загуглил, и естестно то ли не понял, то ли не...

Описать класс "Фигура" ("Шашка", "Дамка")
1. Класс “фигура”: координаты на шахматной доске, цвет. Метод – “ход” – в одном из двух...

Хэш-таблица, ошибка
Всем добрый день. Нужна помощь. За основу взять ПРИМЕР1 хэш-таблицы с прямой адресацией...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Закрытая тема Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.