簡體   English   中英

如何在未排序的地圖中將lambda函數用作哈希函數?

[英]How to use lambda function as hash function in unordered_map?

我想知道是否可以在C ++ 11中將lambda函數用作unordered_map的自定義哈希函數? 如果是這樣,語法是什么?

#include<unordered_map>
#include<string>

int main() {
    auto my_hash = [](std::string const& foo) {
        return std::hash<std::string>()(foo);
    };

    std::unordered_map<std::string, int, decltype(my_hash)> my_map(10, my_hash); 
}

您需要將lambda對象傳遞給unordered_map構造函數,因為lambda類型不是默認可構造的。

正如@mmocny在評論中建議的那樣,如果您真的想擺脫decltype ,也可以定義make函數來啟用類型推導:

#include<unordered_map>
#include<string>

template<
        class Key,
        class T,
        class Hash = std::hash<Key>
        // skipped EqualTo and Allocator for simplicity
>
std::unordered_map<Key, T, Hash> make_unordered_map(
        typename std::unordered_map<Key, T, Hash>::size_type bucket_count = 10,
        const Hash& hash = Hash()) {
    return std::unordered_map<Key, T, Hash>(bucket_count, hash);
}

int main() {
    auto my_map = make_unordered_map<std::string, int>(10,
            [](std::string const& foo) {
                return std::hash<std::string>()(foo);
            });
}

暫無
暫無

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

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