C++set集合遍历的时候怎么调用集合中的值????
我把几个结构体放进set集合里,结构体里有intx;inty两个值。我想在遍历set集合的时候,来对比各个结构体中x或者y值的大小,应该怎么做呢?????...
我把几个结构体放进set集合里,结构体里有 int x ; int y 两个值。
我想在遍历set集合的时候,来对比各个结构体中x或者y值的大小,应该怎么做呢????? 展开
我想在遍历set集合的时候,来对比各个结构体中x或者y值的大小,应该怎么做呢????? 展开
1个回答
展开全部
#include <iostream>
#include <set>
using namespace std;
typedef struct STRUC
{
int x;
int y;
}STRUCT;
int main()
{
STRUCT struc1, struc2, struc3;
struc1.x = 1;
struc1.y = 2;
struc2.x = 3;
struc2.y = 4;
struc3.x = 5;
struc3.y = 6;
long add1 = (long)&struc1;
long add2 = (long)&struc2;
long add3 = (long)&struc3;
set<long> myset;
myset.insert(add1);
myset.insert(add2);
myset.insert(add3);
set<long>::iterator iterCur = myset.begin();
set<long>::iterator iterEnd = myset.end();
//遍历并获取x和y的值,此时你爱怎么比较大小都可以了
for (; iterCur != iterEnd; ++iterCur)
{
cout<<((STRUCT*)(*iterCur))->x<<endl;
cout<<((STRUCT*)(*iterCur))->y<<endl;
}
system("pause");
return 1;
}
更多追问追答
追问
{
coutxy<<endl;
}
这个没看明白,我要怎么比较大小啊????
追答
iterCur是指向set集合中当前元素的指针,*iterCur就是当前元素的值,而这个值是long型,它代表了对应结构体的地址,为了通过这个地址去调用这个结构体,首先就要把这个long型值转换成指向结构体的指针,我们用这个符号(STRUCT*)来转换*iterCur,这就是数据类型的强制转换,写出来就是:(STRUCT*)(*iterCur)。后面一个括号是set集合中的long值,前面一个括号把这个long值转换成了STRUCT类型的指针。既然获取到结构体指针了,那当然就可以通过指针操作符“->”来获取结构体中的成员变量,于是就有了((STRUCT*)(*iterCur))->x,这就是这个结构体中的x的值,取y的值同理。你在遍历的时候就可以把每一个结构体的x和y值都取出来,既然x和y的值都已经能够获取到了,那你想比较哪两个变量就直接有>或<来比较就好了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询