Я хочу узнать о функциях отображения в c/C++ вообще, так что это базовая программа для неупорядоченного отображения. Я использую неупорядоченное сопоставление, потому что мои входные данные не отсортированы, и я читал, что unordered_map
очень эффективен. Здесь у меня есть массив, с которым я создаю хеш-таблицу, и использую функцию lookup
, чтобы определить, находятся ли элементы в другом массиве в хэш-таблице или нет. Я несколько вопросов относительно этой реализации:Является ли это использование неупорядоченной карты эффективным/правильным способом?
#include <stdio.h>
#include <unordered_map>
using namespace std;
typedef std::unordered_map<int,int> Mymap;
int main()
{
int x,z,l=0;
int samplearray[5] = {0,6,4,3,8};
int testarray[10] = {6,3,8,67,78,54,64,74,22,77};
Mymap c1;
for (x=0;x< sizeof(samplearray)/sizeof(int);x++)
c1.insert(Mymap::value_type(samplearray[x], x));
for (z=0;z< sizeof(testarray)/sizeof(int);z++)
if((c1.find(testarray[z]) != c1.end()) == true)
l++;
printf("The number of elements equal are : %d\n",l);
printf("the size of samplearray and testarray are : %d\t%d\n",sizeof(samplearray)/sizeof(int),sizeof(testarray)/sizeof(int));
}
- Прежде всего, это правильный способ реализовать? Я получаю ответы правильно, но кажется, что я использую слишком много для цикла.
- Это кажется довольно хорошим с очень маленькими данными, но если я имею дело с файлами размером> 500 МБ, то это кажется, что если я создам хеш-таблицу для файла 500 МБ, тогда размер самой хэш-таблицы будет в два раза больше много, что составляет 1000 МБ. Это всегда так?
- В чем разница между std :: неупорядоченной картой и boost :: неупорядоченной картой?
И наконец, небольшая просьба. Я новичок в C/C++, поэтому, если вы даете советы, подобные некоторым другим typedef/libraries, я был бы очень признателен, если бы вы могли использовать небольшой пример или реализовать его в своем коде. Спасибо
Не подходит для построения диапазона (как в, 'std :: set myset (samplearray, end (samplearray));')? –
Cubbi
@Cubbi: В случае чего-то вроде вектора, это определенно предпочтительнее. В случае набора наиболее предпочтительным было бы личное, а не общее. В зависимости от источника данных построение на основе диапазона часто не подходит/возможно, хотя и пытается научить, когда использовать/избегать его, было бы много (возможно, слишком много) для одного ответа ... –
@jerry : Я действительно хочу считать элементы.Установить пересечение будет дорогостоящей операцией на больших файлах размером> 10 ГБ из-за функции сортировки. Это не? –