Что такое
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;
}
};
Немного больше:
Not
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