Tips!如何在set里存放进自定义的结构体?

这个问题是在我写Leetcode-141忽然萌生出的小问号:
判断一个链表有没有环,如今能看到的作法通常有两种:一个是快慢指针,另外一个是每遇到一个Node就把他的地址存进set中,若是find(a)!=s.end();就表示出现了环。咱们在新建set通常是这样写:set<LinkList*> s;表明容器里存放的是地址。那么,我能不能往里面直接存Node呢?
应该是能够的,可是因为插入的类型是自定义的,非基本类型。而set/map这类容器是自动排序的,基本类型有默认的排序规则,可是自定义的没有,所以咱们须要重载<运算符,至关于给自定义类型一个排序准则。ios

#include <iostream>
#include <set>
using namespace std;

typedef struct Node{
    int val;
    struct Node *next;
} LinkNode, *LinkList;

bool operator<(const LinkNode &a,const LinkNode &b){
    return a.next < b.next;
}

int main(){
    set<LinkNode> s;
    LinkNode a,b,c;
    a.val = 1;
    b.val = 2;
    c.val = 3;
    a.next = &b;
    b.next = &c;
    c.next = NULL;
    s.insert(a);
    s.insert(b);
    s.insert(c);

    for (set<LinkNode>::iterator iter = s.begin(); iter != s.end();++iter){
         cout << iter->val<< endl;
    }
    
}

输出结果是:3,1,2
所以咱们知道链表结点已被放进set且完成了自动排序,顺序是c,a,b。spa

相关文章
相关标签/搜索