2013-10-27 5 views
0

Я хочу использовать алгоритм сортировки stl для сортировки некоторых чисел, но также хочу запомнить их начальную позицию. У меня есть структура данных, как это:Алгоритм сортировки по C++ для структур данных

struct Numbers { 
    int position; 
    int value; 
}; 

Я создал вектор чисел, как это:

vector<Numbers> a; 

Как использовать алгоритм СТЛ сортировки, так что я сортирует структуры данных на основе Значение?

ответ

4

Вы можете использовать функтор тоже:

struct comp { 

bool operator()(const Numbers &lhs, const Numbers& rhs) const{ 

    lhs.value < rhs.value; 
} 

}; 

std::sort(a.begin(),a.end(), comp()); 

С C++ 11, вы можете использовать лямбда-функция:

std::sort(a.begin() , a.end() , 
      [](const Numbers& lhs , const Numbers& rhs) 
      { return lhs.value < rhs.value; } 
     ); 
+0

использует const обязательно? и могу ли я использовать функцию comp, не закрывая ее внутри struct? если нет, то почему? спасибо – user2653125

+1

@ user2653125 Да, вы можете использовать 'bool comp (const Numbers & lhs, const Numbers & rhs) const {lhs.value P0W

+0

@ P0W. Он спрашивал, является ли обязательная квалификация' const'. Это не так. 'const' не используется, чтобы избежать копирования,' & '(ссылочный квалификатор). –

4

Вам нужно перегрузить "<" оператора, например, так:

bool Numbers::operator<(Numbers temp) 
{ 
    return value < temp.value; 
} 
1

Использование std::sort и обеспечивают пользовательский компаратор (шаблон агд Compare)

#include <algorithm> 
#include <vector> 

//... 
std::vector<Numbers> a; 

//fill the vector a and set Numbers::position of each element accordingly... 

struct { 
    bool operator()(const Numbers& a,const Numbers& b)const 
    { 
     return a.value < b.value; 
    } 
} my_comparator; 

std::sort(a.begin(),a.end(),my_comparator); 

//... 
+3

, пожалуйста, пожалуйста, избегайте использования имени пространства std' – Manu343726

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