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

Определение хэш-функции для контейнера - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Есть ли смысл в изучении C++ http://www.cyberforum.ru/cpp-beginners/thread1760119.html
Есть ли смысл учить C++ без знаний С ? Все равно ведь придется учить С даже если ты вдоль изучишь С++ если ты новичок в этом деле. Объясните пожалуйста в чем разница и что изменится в случае если ты изучишь в первую очередь С++ нежели Си.
C++ Исправить код, взаимодействующий с игрой Counter-Strike Здравствуйте, не могу понять что я не так делаю, вылазят ошибки не объявлен идентификатор С2065 посмотрите пожалуйста код приложу ниже. #include "stdafx.h" #include "include.h" using namespace std; Utils utils; http://www.cyberforum.ru/cpp-beginners/thread1760106.html
"Нарушение прав доступа при чтении по адресу 0x00000000" C++
код: #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <math.h> int strtoint(char *s) { int temp = 0; int i = 0; int sign = 0; if (s == '-') /*на этой строчке вылетает*/ {
C++ Подключить библиотеку odeint к Xcode
Здравствуйте, я новичок в Xcode (и вообще в программирований на С++). Подскажите пожалуйста, как подключить библиотеку odeint (http://headmyshoulder.github.io/odeint-v2/) к (консольному) проекту в Xcode ?
C++ Заполнить двумерный массив размером 5 на 5 по спирали http://www.cyberforum.ru/cpp-beginners/thread1760093.html
Заполнить двумерный массив таким образом 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9
C++ Заполнить матрицу по спирали значениями, полученными от пользователя Создать двухмерный массив по спирали любого размера введённым пользователем с клавиатуры подробнее

Показать сообщение отдельно
4AKE
29 / 29 / 12
Регистрация: 20.12.2010
Сообщений: 115
11.06.2016, 18:37     Определение хэш-функции для контейнера
для std::unordered_map<uint64_t[4], std::string> можно так упороться:
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
#include <iostream>
#include <unordered_map>
#include <cstdint>
 
using namespace std;
 
typedef uint64_t KeyType;
 
struct Key {
    KeyType data[4];
    friend bool operator==(const Key& lhs, const Key& rhs) {
        return std::equal(lhs.data, lhs.data + 4, rhs.data);
    }
    friend ostream& operator<<(ostream& os, const Key& dt) {
        os << '{' << dt.data[0] << ',' << dt.data[1] << ',' << dt.data[2] << ',' << dt.data[3] << '}';
        return os;
    }
};
 
struct KeyHasher {
    std::size_t operator()(const Key& k) const {
        return ((hash<KeyType>()(k.data[0])
            ^ (hash<KeyType>()(k.data[1]) << 1)) >> 1)
            ^ (hash<KeyType>()(k.data[2]) << 1)
            ^ (hash<KeyType>()(k.data[3]) << 1);
    }
};
 
int main() {
    Key key1 = { 1, 2, 12, 8 };
 
    std::unordered_map<Key, std::string, KeyHasher> m = {
        { key1, "example" },
        { { 1, 3, 21, 9 }, "another" },
        { { 1, 4, 21, 9 }, "another2" },
    };
    m[{{ 1, 2, 12, 9 }}] = "test";
    m[Key( { 2, 2, 2, 2 } )] = "test2";
    m.insert({ { 2, 1, 2, 2 }, "test3" });
 
    for (auto elem : m) {
        std::cout << elem.first << " " << elem.second.data() << "\n";
    }
    cin.get();
    return 0;
}
хеш примерный, на коллизии не проверял
 
Текущее время: 13:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru