我有一个具有唯一键的结构。我想将这些结构的实例插入到一个集合中。我知道要做到这一点,必须重载 < 运算符,以便 set 可以进行比较以进行插入。
以下不起作用:
#include <iostream>
#include <set>
using namespace std;
struct foo
{
int key;
};
bool operator<(const foo& lhs, const foo& rhs)
{
return lhs.key < rhs.key;
}
set<foo> bar;
int main()
{
foo *test = new foo;
test->key = 0;
bar.insert(test);
}
最佳答案
这可能会有所帮助:
struct foo
{
int key;
};
inline bool operator<(const foo& lhs, const foo& rhs)
{
return lhs.key < rhs.key;
}
如果您使用命名空间,最好声明 operator<()
在同一个命名空间中的函数。
为了您编辑后的完整性,正如其他人指出的那样,您正在尝试添加 foo*
在哪里 foo
预计。
如果你真的想处理指针,你可以把 foo*
换行。进入智能指针类(auto_ptr
,shared_ptr
,...)。
但请注意,在这两种情况下,您都会失去重载 operator<
的好处在 foo
上运行,而不是 foo*
.
关于c++ - 如何在 C++ 中拥有一组结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5816658/