2017-02-05 6 views
2

Я пытаюсь сортировать std::vector, содержащие пользовательские структуры, каждый из которых имеет свои vector значений int. Ключ в том, что я хочу сортировать на основе заказа внутреннего intvector ... т. Е. {1, 1, 2, 3, 4} составляет менее {1, 2, 2, 3, 4} из-за второго значения в vector.C++ Неверная сортировка сортировщика Vector of Structs

Мне кажется, что это обеспечит строгий слабый порядок, но я всегда получаю исключение Invalid Comparator при его запуске. Я также попытался реализовать отдельную ключевую функцию в качестве третьего параметра для std::sort(), но то же самое происходит.

Что я делаю неправильно?

#include <iostream> 
#include <algorithm> 
#include <vector> 

typedef struct AA { 
    std::vector<int> AA_v; 
    bool operator<(const AA& a1)const { 
     for (int i = 0; i < this->AA_v.size(); i++) { 
      if (this->AA_v[i] < a1.AA_v[i]) { 
       return true; 
      } 
     } 
     return false; 
    } 
}AA; 

void main(void) { 
    AA a1, a2, a3, a4; 
    a1.AA_v = { 1, 1, 3, 5, 4 }; 
    a2.AA_v = { 1, 1, 2, 4, 5 }; 
    a3.AA_v = { 0, 1, 3, 5, 4 }; 
    a4.AA_v = { 1, 1, 3, 4, 5 }; 

    std::vector<AA> AA_vector; 
    AA_vector.push_back(a1); 
    AA_vector.push_back(a2); 
    AA_vector.push_back(a3); 
    AA_vector.push_back(a4); 

    std::sort(AA_vector.begin(), AA_vector.end()); 
} 
+2

Должен быть 'INT main', не' недействительным main'. –

ответ

4

Попробуйте с

bool operator<(const AA& a1)const { 
    for (int i = 0; i < this->AA_v.size(); i++) { 
     if (this->AA_v[i] < a1.AA_v[i]) { 
      return true; 
     } 
     else if (this->AA_v[i] > a1.AA_v[i]) { 
      return false; 
     } 
    } 
    return false; 
} 

в противном случае, с кодом, {3, 1} результат меньше, чем {1, 3} и результат также верно, что {1, 3} является меньшим, чем {3, 1}.

P.s .: но вы также можете использовать operator<() для векторов

bool operator< (const AA& a1) const 
{ return this->AA_v < a1.AA_v; } 
+0

Я не понимал, что вам нужно будет заставить другое ложное, и я удивлен, что я не встретил оператора <() для векторов. – incanus86