2013-11-24 4 views
1

У меня есть массив, который имеет структуру, как:Получение массива структур с использованием элемента структуры

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. Таким образом, я достигаю 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 s, пока не найдете интересующий вас 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.

Смежные вопросы