2013-11-24 39 views
1

的元件I具有保持像的结构的阵列:获取结构的阵列,通过使用结构

struct Point 
{ 
int x; 
int y; 
} 

Point array_of_structure[10] ; 

for(int i=0;i<10;i++) 
{ 
    array_of_structure[i].x = i*2; 
} 

我想要得到保持的6 x值以这种方式予访问结构y结构的价值。我该怎么做? 这件事情就像下面:

Point p = Get the structure which contains x value of 6; 
int c = p.y; 

这里是一个样品溶液。但我需要一个更好的主意或想法。

for(int i=0;i<10;i++) 
    if(array_of_structure[i].x==6) 
     return array_of_structure[i].y; 

我想过关于也许指针做这份工作,但我不确定。我无法弄清楚如何解决这个问题。

+0

你知道如何迭代数组吗?你知道如何使用指针吗? – Beta

+0

是的。但是,我想知道是否存在一个有效的解决方案,标准的库函数或明智的方式 – oiyio

+0

可能有更紧凑的方法来执行此操作,但它们基本上是线性搜索的缩写。如果您有权假定数据已排序,那么您可以查看二进制搜索。你的初始化按照递增的顺序设置x坐标,但是它根本不设置y坐标,所以你不清楚你期望发生什么。 –

回答

2

标准库提供了一个函数std::find_if可用于查找没有循环的项目。但是,作为学习练习,您可以使用如下所述的循环来完成:

您可以迭代struct的数组,直到找到感兴趣的x。您可以使用指针或索引,具体取决于您的偏好。你需要设置一个标志,指示你是否找到了你的物品。

这里是你怎么可以用一个指针做到这一点:

struct Point *ptr; 
bool found = false; 
for (ptr = array_of_structure ; !found && ptr != &array_of_structure[10] ; ptr++) { 
    found = (ptr->x == x); 
} 
if (found) { 
    cout << ptr->y << endl; 
} 

这里是你如何可以用指数做到这一点:

int index ; 
bool found = false; 
for (index = 0 ; !found && index != 10 ; index++) { 
    found = (array_of_structure[index].x == x); 
} 
if (found) { 
    cout << array_of_structure[index].y << endl; 
} 

注意:如果你正在寻找一个find_if解决方案,here is an answer that explains this approach