struct iterator_hash {
template<class Iterator>
size_t operator()(Iterator it) const {
using value_type = typename std::decay< decltype(*it) >::type;
return std::hash<value_type>{}( *it );
}
};
struct iterator_element_equals {
template<class Iterator>
size_t operator()(Iterator lhs, Iterator rhs) const {
return *lhs == *rhs;
}
};
std::vector<Items> v;
std::unordered_set<std::vector<Items>::iterator, iterator_hash, iterator_element_equals> s;
for(auto it = v.begin(); it != v.end(); ++it) {
s.insert(it); // not *it
}
size_t uniqueCount = s.size();
ここでは、基になる要素をハッシュして比較するベクター イテレーターにハッシュを作成します (.end()
イテレーターに渡さないでください)。
次に、セットの反復子を挿入し、その大きさを尋ねます。
必要に応じて、代わりに astd::set<Iterator, iterator_less>
または何かを使用できます。