2013-11-24 71 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