std::set 错误:与 »operator<« 不匹配

use*_*931 2 c++ set c++11

我有一堂课(摘录):

\n\n
class Package\n{\nprivate:\n        string s_package_name;\n        float f_boottime;\n        float f_bytesize;\n        list <Package> l_depends;\n        list <Package> l_selects;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我想生成许多对象并将它们列出在一个唯一的“数组”中,因此我添加了set如下对象:

\n\n
set<Package> l_tempSet;   \nPackage PackageA(1, 11, "what a package");\nPackage PackageB(2, 22, "what a 2nd package");\n\nl_tempSet.insert(PackageA);\nl_tempSet.insert(PackageB);\n
Run Code Online (Sandbox Code Playgroud)\n\n

编译时我收到一条错误消息:

\n\n
\n

与 \xc2\xbboperator<\xc2\xab 不匹配(操作数类型为 \xc2\xbbconst Package\xc2\xab 和 \xc2\xbbconst\n Package\xc2\xab)

\n
\n\n

当单击错误消息时,它会将我指向 set.h 到unique调用的行,我认为这就是错误。

\n\n

C++ 是否真的无法将“唯一”对象(如本示例中所示)放入列表和集合中,并且只能处理简单的数据类型(如 int、float 等)?或者我在某个地方出错了,请帮助我,我不确定错误到底在哪里。

\n\n

感谢您的支持

\n

The*_*dis 5

问题是,c++std::set是有序的,因此它需要通过评估 来对元素进行排序operator<

基本上,您的问题有以下三种解决方案:

  1. 为您的班级实施operator<在此处查看更多信息)

     bool operator<(const Package& other) const
     {
         //return true if this < other
     }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用未排序的集合,例如std::unordered_set,但随后您必须实现相等运算符和哈希函数。

  3. 实现一个比较器函数并将其传递给set第二个模板参数:

     bool smaller (const Package& left, const Package& right) 
     {
         //return true if left < right;
     }
     std::set<Package,std::function<bool(const Package&, const Package&)>> newSet (std::function<bool(const Package&, const Package&)>(smaller));
    
    Run Code Online (Sandbox Code Playgroud)