2015-11-21 2 views
3

Как мне сортировать всю структуру и все ее элементы в массиве на основе double gc от минимального до самого высокого?Сортировка всего массива структуры на основе значения gc

Я понятия не имею, с чего начать, и боролись часами.

struct DNA 
{ 
    vector <string>header; 
    string DNAstrand; 
    double gc; 
    int valid; // 0 not valid | 1 valid 
}; 
struct World 
{ 
    // int  numCountries; 
    DNA dnas[MAX_DNA_SIZE]; 
} myWorld; 

В основном моя цель состоит в том, чтобы расположить все элементы в синхронизации с использованием дс низшего к высшему, так что если я тянуть myWorld.dnas[2].valid или так Итл коррелируют с его дс раз отсортирован.

+0

Так в основном, вы хотите сортировать с gc как ключ? – templatetypedef

+0

Если это термин да, пожалуйста. @templatetypedef – mystycs

+0

Но я не ищу какой-либо сложный алгоритм сортировки деревьев и т. д. @templatetypedef – mystycs

ответ

1

Поскольку вы, кажется, не имеют C++ 11, вы можете попробовать следующее:

#include <algorithm> 

int main() 
{ 
    struct 
    { 
     bool operator()(DNA const& a, DNA const& b) 
     { 
      return a.gc < b.gc; 
     } 
    } dna_comparer; 

    std::sort(myWorld.dnas, myWorld.dnas + MAX_DNA_SIZE, dna_comparer); 
} 
+0

Очень ценим! Я получаю эту ошибку сейчас 'error: no matching function for call to 'sort (DNA [5000], DNA *, &)' |' @ user2296177 – mystycs

+0

Я изменил ее на 'static bool dna_comparator (DNA a, ДНК b) {return a.gc> b.gc; } 'и, похоже, это сработало. Я на правильном пути? – mystycs

+0

@sonicboom Использование '>' будет сортировать их по убыванию. Использование 'DNA' вместо' DNA const & 'будет повлечь за собой две копии при каждом вызове компаратора. Однако это сработает. – user2296177

2

Это довольно легко с C++ 11 и std::sort:

std::sort(std::begin(myWorld.dnas), std::end(myWorld.dnas), [](const DNA& dna1, const DNA& dna2) { return dna1.gc < dna2.gc; }); 
+0

Я получаю сообщение об ошибке следующим образом 'Begin не был объявлен в этой области' – mystycs

+0

Попробуйте использовать' std :: begin' и 'std :: end '. – Jack

+0

Теперь im get 'begin не является членом std' @Jack – mystycs

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