Что
operator size_t () const
Среда: Visual Studio 2010 Professional
TL; DR
Сегодня я искал способ использовать std::tr1::unordered_set
. Поскольку в прошлый раз я спросил как использовать std::map
, я решил выяснить это сам.
Я погуглил, и большинство результатов сказали мне, что у меня есть структура для хеширования. Путь показался мне немного сложным, и я продолжил поиски и, наконец, наткнулся на другой подход.
мне нужно реализовать
bool operator == (const edge & another) const
а также
operator size_t () const
Полученный код находится ближе к концу вопроса.
==
знаком без проблем. size_t
тоже знакомо. Но что такое operator size_t
?
Это похоже на equals
и hashCode
для Java, которые должны быть переопределены вместе в соответствии с Effective Java. Но я не уверен, особенно когда имя size_t
.
Полученный код выглядит следующим образом. Вся программа работает нормально и выдает правильные результаты.
class edge {
public:
int x;
int y;
edge(int _x, int _y) : x(_x), y(_y) {
}
bool operator == (const edge & another) const {
return (x == another.x && y == another.y);
}
operator size_t () const {
return x * 31 + y;
}
};
Немного больше:
Нет
size_t operator () const
который не может быть скомпилирован:
error C2143: syntax error : missing ';' before 'const'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C2059: syntax error : '{'
error C2334: unexpected token(s) preceding '{'; skipping apparent function body
Даже нет
int operator size_t () const
но как я вижу функция возвращает int
. Код ошибки выглядит следующим образом:
error C2549: user-defined conversion cannot specify a return type