我有一个具有唯一键的结构.我想将这些结构的实例插入到集合中.我知道要做到这一点<操作符必须重载,以便set可以进行比较才能进行插入.
I have a struct which has a unique key. I want to insert instances of these structs into a set. I know that to do this the < operator has to be overloaded so that set can make a comparison in order to do the insertion.
以下内容无效:
#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<()函数.
If you are using namespaces, it is a good practice to declare the operator<() function in the same namespace.
出于编辑后的完整性考虑,并且正如其他人指出的那样,您正在尝试添加 foo * 到期望 foo 的地方.
For the sake of completeness after your edit, and as other have pointed out, you are trying to add a foo* where a foo is expected.
如果您真的想处理指针,则可以将 foo * 包装到一个智能指针类中( auto_ptr , shared_ptr 、...).
If you really want to deal with pointers, you may wrap the foo* into a smart pointer class (auto_ptr, shared_ptr, ...).
但是请注意,在这两种情况下,您都失去了在 foo 而不是 foo * 上运行的重载 operator< 的好处.
But note that in both case, you loose the benefit of the overloaded operator< which operates on foo, not on foo*.
更多推荐
如何在C ++中具有一组结构
发布评论