unordered_*
kapsayıcıların bir karma işlevine ihtiyaçları vardır. Varsayılan olarak, std::hash
kullanıyorlar, ancak standart kitaplıkta sağlanan std::pair<T1,T2>
için std::hash
özelleştirme yok. Öte yandan, siparişi konteynırları std::less
(varsayılan olarak) ve std::pair
'un operator<
ürününe sahiptir. Bu yüzden işe yarıyor.
pair
ile sırasız bir konteynere sahip olmak için, kendiniz bir hash functor sağlamanız gerekecektir. Örneğin:?
struct SimpleHash {
size_t operator()(const std::pair<int, int>& p) const {
return p.first^p.second;
}
};
std::unordered_set<std::pair<int, int>, SimpleHash> S;
S.insert(std::make_pair(0, 1));
S.emplace (... da çalışmaya devam eder ve eğer değil, ne değişirdi – HeinrichStack
@Barry p.first olabilir^p.second p_a gibi farklı çiftleri için aynı değeri elde ve p_b? – olivia
@olivia Elbette, (a, b) 've' (b, a) 'için kesinlikle aynı değeri verir. Mükemmel bir karma işlevi değil, sadece basit bir örnek olması amaçlanmıştır. – Barry