//网上大多例子都只是基本数据类型,或者简单的只有一个成员的进行排序的例子或者查找的例子. struct MY_NODE { int x; int y; //大小比较,这里是按 y从小到大,在y相等是按x从小到大排序. bool operator <(const MY_NODE &e) const { if(y==e.y) { return x<e.x; } else { return y<e.y; } } //重载()操作符,以实现查找,对于结构体中多个变量的查找匹配,似乎不能使用函数 bool operator() (const MY_NODE&e1) { return e1.x==x && e1.y==y; } };
//比校大小. bool less_node(MY_NODE &e1,MY_NODE &e2) { if(e1.y==e2.y) { return e1.x<e2.x; } else return e1.y<e2.y; }
//用于特定结构体的查找, 比如 其x=10;//当然,也可以与此函数能访问的共它数据进行比较,比如有全局变量等. bool node_equal(MY_NODE &e1) { return e1.x==10; } vector<MY_NODE> vnode; MY_NODE node; node.x=2; node.y=3; vnode.push_back(node); node.x=1; vnode.push_back(node); node.x=2; node.y=1; vnode.push_back(node); vector::iterator it; node.x=2; node.y=2; //it=find_if(vnode.begin(),vnode.end(),node_equal);//使用函数比较方式. it=find_if(vnode.begin(),vnode.end(),MY_NODE(node));//查找元素,使用括号重载方法 if( it == vnode.end()) { OutputDebugString(TEXT("未找到")); } node.x=1; node.y=3; it=find_if(vnode.begin(),vnode.end(),MY_NODE(node));//查找元 //sort(vnode.begin(),vnode.end(),less_node);//使用函数方式排序. sort(vnode.begin(),vnode.end());//使用重载<符号方式排序.素,使用括号重载方法
STL 结构体排序及查找 使用sort及find_if
最新推荐文章于 2023-07-12 12:50:32 发布