讨论/算法和数据结构/求问一个容器设计问题/
求问一个容器设计问题

有一些数据是两个元素的对应,比如 <1,3>,<2,4>,<6,7><1,3>,<2,4>,<6,7> 要对他们进行保存并删除掉反过来一样的比如 <1,3><3,1><1,3><3,1>,我设计的是 vector<pair<x,y>>,但对于这样的 findfind 函数好像不适用了,有什么内置的函数来实现吗?

展开讨论
共 3 个讨论

你的意思应该是 <1,3><1,3><3,1><3,1> 当作同一个吧,那么可以把 <3,1><3,1> 这种前面的大于后面的交换,确保都是前面的小于等于后面的,或者相反也可以,这是一个方法。
另一个方法,findfind 的判断需要使用 ==== 这个符号,你把那个数据结构的 ==== 符号重载一下就行,具体你搜一下就明白了。

2

可以使用unordered_set<string> :

    unordered_set<string> t;
    int a, b;   // <a,b>
    ...
    int c=min(a,b);
    b = max(a,b);
    t.insert(to_string(c)+" "+to_string(b));
1

两个map,分别保存first->second和second->first,保存和删除同时维护这两个map即可