나는 내 자신의 구조를 위해 새로운 해시 함수를 작성하려고합니다. 문제는 여기 온다사용자 정의 구조에서 정의 된 정렬되지 않은 세트에 대해 사용자 정의 해시 함수를 작성하는 방법은 무엇입니까?
struct peopleHash{
size_t operator()(const people& p) const{
return p.id;
}
}
: 그리고 여기 내 코드입니다 :
struct people{
int id;
unordered_set<people>friends;
people(int x) : id(x) {}
};
그리고 내가 좋아하는, 친구에 대한 해시 함수를 필요로 내가 먼저 사람들을 초기화 할 경우 peopleHash 기능이 정의되지 않은 "찾아 낼 것입니다 사람을 입력하십시오. " peopleHash를 먼저 초기화하면 같은 일이 발생합니다. 내가 좋아하는, 사람들의 구조체 내부에 peopleHash을 정의하려고 :
struct people{
int id;
struct peopleHash{
size_t operator()(const people& p) const{
return p.id;
}
};
unordered_set<people, peopleHash>friends;
people(int x) : id(x) {}
};
그러나 컴파일러는 말했다 :
error: invalid operands to binary expression ('const people' and 'const people')
{return __x == __y;}
나는 아무 생각이 어떻게 처리하지해야 ... 어떤 도움을?
'people :: operator =='을 구현하십시오. 두 인스턴스가 동일한 해시 값을 갖는다면, 그것들은 동일성을 위해 비교 될 것입니다. – Praetorian
해싱 문제 이외의 다른 문제가 있습니다. 정렬되지 않은 컨테이너의 클래스는 또한'=='연산자를 구현해야하며 컨테이너의 클래스는 완전한 유형이어야하며'people'의 정의가 완료 될 때까지는 발생할 수 없습니다. 이는 순방향 선언으로 그 자체만으로 해결되는 순환 의존 문제 이상입니다. –
@Praetorian 답장을 보내 주셔서 감사합니다! 나는 운영자 ==를 추가,하지만 오류가 말한다 : 오버로드 '연산자는 =='이진 연산자 (3 개 매개 변수가 있습니다) ... 이해가 안 ... 부울 연산자 == (CONST 명 및 X, CONST를해야합니다 사람 & y) { return x.id == y.id; } –