C++从入门到放弃

2019-03-05 关于C++ set

2019-03-05  本文已影响0人  lixin_karl

(C++)工作中遇到的一个关于set的问题,对于set中的对象,如果改变某个对象的key的值,不会改变对象的位置,这是一定的。但是如果你想找到这个对象,那就要看缘分了,巧了的时候可以找到,但是正常是找不到的,应为key变了,此对象在一个不正常的位置上。对于这种情况,我们应该先把对象拿出来,然后set中删除,最后再插进去。

#include <iostream>
#include <set>

struct T{
    int a;
    std::string str;
};

struct Cmp{
    bool operator()(const T * t1,const T * t2)
    {
        return t1->a < t2->a;
    }
};
int main()
{
    std::set<T *,Cmp> s;
    T t1;t1.a = 2;
    T t2;t2.a = 3;
    T t3;t3.a = 4;
    T t4;t4.a = 5;
    T *ptr = &t1;
    s.insert(ptr);s.insert(&t2);s.insert(&t3);s.insert(&t4);

    ptr->a = 44;
    auto it = s.find(ptr);
    if(it != s.end())
    {
        std::cout<<"可以找到ptr"<<std::endl;
    }else{
        std::cout<<"找不到ptr"<<std::endl;
    }
}
这种情况输出 :找不到ptr
就是key变了。
上一篇 下一篇

猜你喜欢

热点阅读