我正在使用abseil 的set 实现。当我更改 Indexed<T_> 的比较函数时:
曾是:
template<typename T_>
auto Indexed<T_>::operator==(Indexed<T_> const& indexed) const -> bool {
return indexed.id_ == id_;
}
变成:
template<typename T_>
auto Indexed<T_>::operator==(Indexed<T_> const& indexed) const -> bool {
return indexed.id_ == id_ && id_ != 0;
}
我得到:
Interface_Engine_ex: .../abseil-src/absl/container/internal/raw_hash_set.h:3156:
void absl::container_internal::raw_hash_set<
absl::container_internal::FlatHashSetPolicy<ie::Indexed<ie::TextStyle>>,
absl::hash_internal::Hash<ie::Indexed<ie::TextStyle>>,
std::equal_to<ie::Indexed<ie::TextStyle>>,
std::allocator<ie::Indexed<ie::TextStyle>>>::emplace_at(size_t, Args &&...)
[Policy = absl::container_internal::FlatHashSetPolicy<ie::Indexed<ie::TextStyle>>,
Hash = absl::hash_internal::Hash<ie::Indexed<ie::TextStyle>>,
Eq = std::equal_to<ie::Indexed<ie::TextStyle>>,
Alloc = std::allocator<ie::Indexed<ie::TextStyle>>,
Args = <ie::Indexed<ie::TextStyle>>]:
Assertion `PolicyTraits::apply(FindElement{*this}, *iterator_at(i)) == iterator_at(i) &&
"constructed value does not match the lookup key"' failed.
哈希函数如下所示:
template<typename T_>
auto std::hash<ie::Indexed<T_> >::operator()(ie::Indexed<T_> const& indexed) -> size_t{
return indexed.get_id();
}