C++set集合遍历的时候怎么调用集合中的值????

我把几个结构体放进set集合里,结构体里有 int x ; int y 两个值。

我想在遍历set集合的时候,来对比各个结构体中x或者y值的大小,应该怎么做呢?????


#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的值都已经能够获取到了,那你想比较哪两个变量就直接有>或<来比较就好了。

追问

我想在for循环中用((STRUCT*)(*iterCur))->x 和 ((STRUCT*)(*(iterCur+1)))->x 比较大小,但是比到最后一个会越界啊,应该怎么加什么处理???

追答if(iterCur != myset.end())
{
    //用((STRUCT*)(*iterCur))->x 和 ((STRUCT*)(*(iterCur+1)))->x  比较大小;
}

把if判断语句写在for循环内部。 

但iterCur+1这样的写法默认是通不过编译的,除非你已经对“+”进行了重装。

像下面这样做可以实现:

int a;
for (; iterCur != iterEnd;)
{
    a = ((STRUCT*)(*iterCur))->x;
    if(iterCur.operator++() != iterEnd)
    {
    if(a > ((STRUCT*)(*iterCur))->x)
    {
        //执行你的操作
        cout<<"大"<<endl;
    }
    else
        cout<<"小"<<endl;
    }
}

温馨提示:答案为网友推荐,仅供参考
相似回答