我有一堂课(摘录):
\n\nclass 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
如下对象:
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\n\n与 \xc2\xbboperator<\xc2\xab 不匹配(操作数类型为 \xc2\xbbconst Package\xc2\xab 和 \xc2\xbbconst\n Package\xc2\xab)
\n
当单击错误消息时,它会将我指向 set.h 到unique
调用的行,我认为这就是错误。
C++ 是否真的无法将“唯一”对象(如本示例中所示)放入列表和集合中,并且只能处理简单的数据类型(如 int、float 等)?或者我在某个地方出错了,请帮助我,我不确定错误到底在哪里。
\n\n感谢您的支持
\n问题是,c++std::set
是有序的,因此它需要通过评估 来对元素进行排序operator<
。
基本上,您的问题有以下三种解决方案:
为您的班级实施operator<
(在此处查看更多信息)
bool operator<(const Package& other) const
{
//return true if this < other
}
Run Code Online (Sandbox Code Playgroud)
使用未排序的集合,例如std::unordered_set
,但随后您必须实现相等运算符和哈希函数。
实现一个比较器函数并将其传递给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)
归档时间: |
|
查看次数: |
2342 次 |
最近记录: |