自定义结构体或者类该用什么容器?

例如

struck data{
 string name;
 int val;
}

只有name和val都相同时才认为相同。
现在需要记录若干个data,新到来一个data的时候判断是否出现过,可以用什么容器?检索是否出现过的效率较高的。
set和map好像都不行。只能用链表吗?
(相同的name可能对应多个val,反之亦然)

结构体里重载一下==和<就可以了,只是检索是否出现可以用unordered_set

结构体是struct


typedef struct
{
    string name;
    int val;
} Data;

vector<Data> data;