2015-04-09 2 views
0

я написал сравнение оператор, как показано ниже:Какое мое настроенное сравнение не работает?

struct GreaterThan 
{ 
    bool operator() (string a, string b) 
    { 

     if (a.length() == 1 && a[0] == b[0]) //LINE1 
     { 
      return true; 
     } 

     if (b.length() == 1 && b[0] == a[0]) //LINE2 
     { 
      return true; 
     } 

     return a.compare(b) == 1 ? true : false; 
    } 
}; 

vector<string> v{"2", "20", "5", "7"}; 
sort(v.begin(), v.end(), GreaterThan()); 

Цель LINE1 и LINE2 должен сделать «2» перед «20» при сортировке. Но это приводит к ошибке выполнения. Ошибка - «неверный оператор <» на визуальной студии.

+0

что бы вы сделали, если "20" и "200" присутствуют? Похоже, вы должны посмотреть на длину строки вместо – dwcanillas

+0

, и ваша ошибка, вероятно, больше того, что вы нам дали. Можете ли вы добавить немного больше выходных данных компилятора? –

+5

Вам необходимо определить [* строгий слабый порядок *) (http://en.cppreference.com/w/cpp/concept/Compare). У вас есть '" 2 ">" 2 "', что делает ваш заказ недействительным. – molbdnilo

ответ

1

Возвращаемое значение std::string::compare не должно быть 1, когда a «больше чем» b. Он должен быть больше 0.

Вместо

return a.compare(b) == 1 ? true : false; 

Я думаю, что вам нужно:

return (a.compare(b) < 0); 
Смежные вопросы