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

Контейнер map: реализовать проверку на уникальность ключа - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Как нарисовать трапецию в кругу http://www.cyberforum.ru/cpp-beginners/thread685570.html
Все добрый вечер! Не могу понять как нарисовать трапецию в кругу... ( сам круг то нарисовал))) Проблемы с трапецией... Добрые люди помогите с решением данной задачи: Вот сам код: У меня мысль таково задать определенные размером стороны, ведь в пространстве какая разница где нарисует главное что бы в кругу!?(в кругу, круг унаследовал я с фигуры треугольник я его там описал, я понимаю то что...
C++ Вторую строку нужно скопировать в конец первой Нужно написать программу, суть такая: Вводятся с клавиатуры две строки, вторую нужно скопировать в конец первой, причем все согласные у второй должны следовать в обратном порядке. Надеюсь на вашу помощь http://www.cyberforum.ru/cpp-beginners/thread685556.html
C++ Что такое ref class
Здравствуйте, господа программисты! Не могли бы вы мне скинуть ссылочку на какой-нибудь сайт, учебник или тому подобное по тому, что называется ref class, а то я сам никак найти не могу. Заранее благодарю. Добавлено через 29 минут Полчаса прошло, а никто так и не посмотрел... Может, я не в тот раздел написал?
Определить количество простых чисел в матрице: подробно разобрать код C++
Нужно подробное объяснение кода, если можно построчно. Определить количество простых чисел в матрице. #include<iostream> #include <conio.h> using namaspace std;
C++ Вычислить обратные значения тех из тех чисел, значения которых не равны нулю http://www.cyberforum.ru/cpp-beginners/thread685530.html
Даны три числа x y z.Вычислить обратные значения тех из них, значения которых не равны нулю , остальные оставить без изменения . Новые значения напечатать #include <stdio.h> #include <conio.h> #include<iostream.h> main() { setlocale(LC_ALL, "Russian"); int x, y, z; float m, n, o; printf ("ââåäèòå çíà÷åíèÿ ");
C++ Как вставить картинку в консоль Ребята как в Си++ вставить картинку? подробнее

Показать сообщение отдельно
Deimoser
4 / 4 / 0
Регистрация: 16.10.2012
Сообщений: 39
31.10.2012, 21:34     Контейнер map: реализовать проверку на уникальность ключа
Приветствую форумчан, имеется контейнер map с элементами
C++
1
2
3
4
struct Elemnts {
    int key;
    char *word;
};
Главное требование контейнера map, это уникальность ключей, каким образом можно реализовать проверку на уникальность ключа?
Заранее спасибо.

Добавлено через 33 минуты
Срочно нужна помощь.

Добавлено через 1 минуту
вот код мультикарты, как из нее сделать обычную map?
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
#include "iostream"
#include <stdio.h>
//МУЛЬТИКАРТА
using namespace std;
int m=4;         //начальный размер контейнера
struct tElem {//элемент контейнера
    int key;
    char *word;
};
struct tIter;
struct tNode{
    tElem * HMap; //хэш-таблица
    double KF;       //коэффициент ее заполнения     
    int Volume;   //число ячеек в массиве hmap
    tIter *Iter;   //попытка создать контейнер внутри контейнера
};
 
int fExtend(tNode *& );
void conout(tNode *& );
tNode*  fCreate(int size){//cоздать мултикарту на основе хэш-таблицы с открытой адресацией
    tElem *map= new  tElem[size];
    //for(int i =0;i<size;i++)
        //map[i].word=new char[64];
    tNode *a=new tNode;
    a->HMap=map;  
    a->Volume=size;
    a->KF=0;
    a->Iter=0;
    int i=0;while(i!=size){
        map[i].word ="nil";i++;} // пометили весь массив как "пустой"
    return a;
}
 
int fDestroy (tNode *& map){//удалить контейнер
    //for(int i =0;i<map->Volume;i++)   почему не работает?
    //  delete map->HMap[i].word;
    delete [] map->HMap;
    delete map;map=NULL;
    return 1;
}
 
//////////////////////////
int Hash(int key,int a){
    return abs(key%a);
}
////////////////////////////
int fCheck(tNode *&map,int key,char *word,int Vol){ //проверка и выдача номера индекса для нового элемента
    if(!strlen(word)) {printf("enter the word\n"); return -1;}
    int q=Hash( key,Vol);
    int i=0;
    while( (*map).HMap[q+i].word!="nil"&&map->HMap[q+i].word!="deleted") {// nill-метка означает пустоту ячейки как для поиска так и для записи , deleted-метка свободна для записи и занята при поиске элемента
        if(!strcmp(map->HMap[q+i].word,word))
          if (map->HMap[q+i].key==key)
            {printf("element is already existance,\n");
        return -1;
        } 
        i++;
        if(q+i==map->Volume)q=i=0;//идем по кругу
    }
        return q+i;//индекс ,куда будем записывать
    }
 
int fAdd(tNode *&map,int key,char *str){//   ф-я добаления 
    char *word=new char[64];strcpy(word,str);
    int i=fCheck( map, key, word,map->Volume);  //проверка и подбор индекса
    if (i==-1)return 0;
    map->HMap[i].key=key;
    map->HMap[i].word=word;
    map->KF += (double)1/map->Volume;
    if(map->KF>0.5)
    fExtend(map);// возможно нужно расширить таблицу
    return 1;
}
int fExtend(tNode *& map){
    int OldVol=map->Volume; //запомнил старый размер таблицы
    tElem *a=new tElem[map->Volume];  //буфер
    int i=map->Volume;
    while(i){
        a[i-1]=map->HMap[i-1];
            i--;
    }
    fDestroy(map);
    map=fCreate(OldVol*2);// создали новый контейнер,скопировали в нег старый, удалили
    for(int i=0;i<OldVol;i++)
        if(a[i].word!="nil"&&a[i].word!="deleted")
           fAdd(map,a[i].key,a[i].word);
    
    delete[]a;
    return 1;
}
 
 
 
tElem * fFind(tNode* &map,int key,char *word){  //поиск
    int q=Hash( key,map->Volume); int i=0,count =0;
 
    while(map->HMap[q+i].word!="nil"){
        if(!strcmp(map->HMap[q+i].word,word))
            if (map->HMap[q+i].key==key)
                return &map->HMap[q+i]; 
        i++;count++;
        if(q+i==map->Volume)q=i=0;//идем по кругу   
    }
    printf("no element\n");
    return  NULL;
}
tElem  fExecute(tNode* &map,int key,char *word){  //извлечение
    tElem* g=fFind(map,key,word);
    tElem a= {-99999,"FAIL-ERROR"};
    if(!g)return a;
    a.key=g->key;a.word=g->word;
    g->word="deleted";
    map->KF -= (double)1/map->Volume;
    
    return a;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 19:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru