首页 >后端开发 >C++ >如何在 C 中使用用户定义类型作为 std::maps 中的键?

如何在 C 中使用用户定义类型作为 std::maps 中的键?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-22 18:14:14779浏览

How Can I Use User-Defined Types as Keys in std::maps in C  ?

克服障碍:使用带有用户定义类型的 std::map 作为键

在 C 中映射键值对领域,首选用户定义类型来定义键的情况并不罕见。但是,当尝试将 std::maps 与用户定义的键一起使用时,编译期间可能会出现神秘的错误消息。为了理解这个错误及其重要性,让我们深入研究 std::maps 和用户定义类型的细微差别。

使用 std::maps 时,我们经常依赖原始类型作为键,例如整数或字符串。基元类型具有明确定义的比较运算符(、== 等),有助于在映射内进行高效的键排序。但是,当使用用户定义的类型作为键时,需要注意的是,这些比较运算符的实现对于映射的正确运行至关重要。这就是您遇到的错误消息发挥作用的地方。

问题中提到的错误暗示缺少运算符

用户定义的 Class1 的实现。默认情况下,std::maps 依赖于 less 。比较键的模板。少<>内部调用操作符要解决这个问题,有几种可行的解决方案:
  1. 实现运算符<:> Define操作员使用比较器函数对象:
  2. 不要实现运算符
    struct Class1Compare {
        bool operator() (const Class1& lhs, const Class1& rhs) const {
            return lhs.id < rhs.id;
        }
    };
    
    std::map<Class1, int, Class1Compare> c2int;
    1. 专门化 std::less:
    2. 如果比较语义对您的使用并不重要在这种情况下,请考虑将 std::less 模板专门用于 Class1。这种方法允许在 Class1 范围之外定义比较标准,从而使代码更具可扩展性。
    namespace std {
        template<> struct less<Class1> {
            bool operator() (const Class1& lhs, const Class1& rhs) const {
                return lhs.id < rhs.id;
            }
        };
    }

    通过采用其中一种方法,您可以克服错误并成功利用 std: :以用户定义类型作为键的映射。选择最符合您的项目要求和设计原则的解决方案非常重要。

以上是如何在 C 中使用用户定义类型作为 std::maps 中的键?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn