簡體   English   中英

帶有哈希函數語法錯誤的c ++ 11 unordered_set

[英]c++11 unordered_set with hash function syntax error

我有以下代碼:

#include<unordered_set>
using namespace std;
struct E{
    size_t distance;
    bool operator>(const E& e)const{
        return distance > e.distance;
    }
    bool operator<(const E& e)const{
        return distance < e.distance;
    }
};
int main(){
    unordered_set<E> s;
    return 0;
}

當我使用g ++ 7.3進行編譯時,會出現很多錯誤:

g++ m.cpp -std=c++11
In file included from /usr/include/c++/7/bits/hashtable.h:35:0,
                from /usr/include/c++/7/unordered_set:47,
                from m.cpp:1:
/usr/include/c++/7/bits/hashtable_policy.h: In instantiation of ‘struct std::__detail::__is_noexcept_hash<E, std::hash<E> >’:
/usr/include/c++/7/type_traits:143:12:   required from ‘struct std::__and_<std::__is_fast_hash<std::hash<E> >, std::__detail::__is_noexcept_hash<E, std::hash<E> > >’
/usr/include/c++/7/type_traits:154:31:   required from ‘struct std::__not_<std::__and_<std::__is_fast_hash<std::hash<E> >, std::__detail::__is_noexcept_hash<E, std::hash<E> > > >’
/usr/include/c++/7/bits/unordered_set.h:98:63:   required from ‘class std::unordered_set<E>’
m.cpp:13:22:   required from here
/usr/include/c++/7/bits/hashtable_policy.h:87:34: error: no match for call to ‘(const std::hash<E>) (const E&)’
noexcept(declval<const _Hash&>()(declval<const _Key&>()))>
        ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/7/bits/move.h:54:0,
                from /usr/include/c++/7/bits/stl_pair.h:59,
                from /usr/include/c++/7/utility:70,
                from /usr/include/c++/7/unordered_set:38,
                from m.cpp:1:
/usr/include/c++/7/type_traits: In instantiation of ‘struct std::__not_<std::__and_<std::__is_fast_hash<std::hash<E> >, std::__detail::__is_noexcept_hash<E, std::hash<E> > > >’:
/usr/include/c++/7/bits/unordered_set.h:98:63:   required from ‘class std::unordered_set<E>’
m.cpp:13:22:   required from here
/usr/include/c++/7/type_traits:154:31: error: ‘value’ is not a member of ‘std::__and_<std::__is_fast_hash<std::hash<E> >, std::__detail::__is_noexcept_hash<E, std::hash<E> > >’
    : public __bool_constant<!bool(_Pp::value)>

我在哪里弄錯了,如何解決?

std::unordered_set對於您提供的類型E不需要operator<operator> 它確實需要您未提供的哈希函數或類似函數的對象(或默認為std::hash<E> )以及您也未提供的operator==

如果您不能提供std::hash<E> ,則可以切換到std::map ,但速度會變慢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM