簡體   English   中英

使用具有可定義狀態的仿函數作為unordered_set哈希函數

[英]Using functor with definable state as unordered_set hash function

我正在嘗試使用具有可定義狀態的仿函數作為unordered_set的哈希器,我面臨的問題是我不知道如何初始化作為模板參數傳遞的仿函數。 就像這樣。

class A{
    private:
        class Hasher{
            private:
                int a;
            public:
                Hasher(int val=3):a(val){};
                size_t operator()(const string & s) const{
                    return s[0]*a;
                }
        };
        unordered_set<string,Hasher??> us;
        int hasher_val;

    public:
        A(int h_val):hasher_val(h_val){};
}

問題是,如何為不同於3的值定義“ a”?

std::unordered_set構造函數具有可選參數 ,可用於初始化其哈希實例:

    unordered_set<string,Hasher> us;
    int hasher_val;

public:
    A(int h_val) : us{51, Hasher(4)}, hasher_val{h_val}{};

一個稍微令人不舒服的事實是,哈希實例是第二個參數,您必須顯式指定哈希存儲桶的大小,而不是依靠C ++庫的知識來提供合適的默認值(在我的示例中,我選擇了51我的頭頂,這可能是非常非常錯誤的,但這將是另一個思考的問題……)。

您應該花幾分鍾時間瀏覽頭文件,以確定C ++實現對集合的存儲桶大小使用的默認值,並提供相同的值。

PS所有庫容器都使用相同的方法:默認使用其構造函數的所有參數,從而可以使用自定義哈希類實例,自定義比較器類實例等顯式構造它們。

暫無
暫無

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

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