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变了。