c++ unordered_set pair自定义比较函数

举报
lessIsBetter 发表于 2024/02/18 20:22:47 2024/02/18
【摘要】 推荐采用lambda表达式的方式int main(){ static auto hashFunc = [](const std::pair<std::string, std::string> &aPair) { return static_cast<size_t>(std::hash<std::string>{}(aPair.first) ^ std::hash<std:...

推荐采用lambda表达式的方式

int main()
{
    static auto hashFunc = [](const std::pair<std::string, std::string> &aPair) {
        return static_cast<size_t>(std::hash<std::string>{}(aPair.first) ^ std::hash<std::string>{}(aPair.second));
//        return size_t(int(aPair.first.front()) + int(aPair.second.front()));
    };
    static auto equalFunc = [](const std::pair<std::string, std::string> &a,
                               const std::pair<std::string, std::string> &b) {
        return a.first == b.first && a.second == b.second;
    };
    using FuncHashType = std::function<size_t(const std::pair<std::string, std::string> &)>;
    using FuncEqualType = std::function<bool(const std::pair<std::string, std::string> &,
                                             const std::pair<std::string, std::string> &)>;
    std::unordered_set<std::pair<std::string, std::string>, FuncHashType, FuncEqualType> a({}, hashFunc, equalFunc);
//    std::unordered_set<std::pair<std::string, std::string>, decltype(hashFunc), decltype(equalFunc)> a({}, hashFunc, equalFunc);
    a.emplace("1", "a");
    a.emplace("2", "A");
    a.emplace("3", "c");
    a.emplace("4", "d");
    a.emplace("3", "e");
    assert(a.find({"1", "a"}) != a.end());
    assert(a.find({"2", "c"}) == a.end());
    assert(a.find({"3", "d"}) == a.end());
    assert(a.find({"3", "c"}) != a.end());
    assert(a.find({"4", "d"}) != a.end());
    assert(a.find({"3", "e"}) == a.end());
    return 0;
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。