C++ unordered_set не удалось вставить пользовательский объект?

#include <iostream>
#include <unordered_set>
#include <set>
using namespace std;

struct Cube {
    int x;
    int y;
    int number;
    bool canRemove;
    Cube(int x, int y, int number) : x(x), y(y), number(number) {}
    bool operator == (const Cube &c) const {
        return true;
    }
};

int main () { 
    int m;
    cin >> m;
    unordered_set<Cube> s;
    //unordered_set<Cube> s1;
    //unordered_set<Cube> s2;
    for (int i = 0; i < m; i++) {
        int x, y;
        cin >> x >> y;
        s.insert(Cube(x, y, i));
    }
    cout << s.size() << endl;
    return 0;
}

Насколько я понимаю: я должен перегрузить ‹ для набора, потому что это двоичное дерево поиска. Я должен перегрузить == для unordered_set, потому что это хеш-таблица. Пожалуйста, поправьте меня, если я ошибаюсь.

Вопрос:

1 код не компилируется, помогите исправить.

2 для этой строки:

bool operator < (const Cube &c) const {

если я удалю второй const. Он также не может скомпилировать набор, зачем мне второй const? почему я не могу перегрузить ‹ таким образом?

bool operator < ( Cube &c) {
}

person Shawn    schedule 31.03.2015    source источник
comment
Ошибка компилятора для 1) ?   -  person deviantfan    schedule 31.03.2015
comment
Это все в названии. unordered не предлагает BST. Вы думаете о std::set.   -  person juanchopanza    schedule 31.03.2015
comment
unordered_set использовать хеш не использовать оператор ‹   -  person Ron Tang    schedule 31.03.2015
comment
Потому что дубликат не отвечает на второй вопрос (или я его еще не видел): если реализация хочет применить функцию к константным переменным, она не может работать без вашей константы. По-видимому, он использует его для константных переменных. (И нет никакого смысла в том, что сравнение типа ‹ и › меняет значение)   -  person deviantfan    schedule 31.03.2015