2015-04-13 2 views
-2
#include <algorithm> 
#include <bitset> 
#include <climits> 
#include <cmath> 
#include <cstdio> 
#include <cstring> 
#include <ctime> 
#include <deque> 
#include <functional> 
#include <iomanip> 
#include <iostream> 
#include <list> 
#include <map> 
#include <queue> 
#include <set> 
#include <sstream> 
#include <stack> 
#include <string> 
#include <vector> 

using namespace std; 

bool fun(int i, int j){ 
    return abs(i - j) != -1; 
} 

int main(){ 
    vector <int> v = { 1, 2, 3, 4, 5 }; 
    sort(v.begin(), v.end(), fun); 
    for (int i = 0; i < v.size(); i++) 
     cout << v[i] << " "; 
    cout << endl; 
    return 0; 
} 

Когда я использую «fun» компаратора, программы вызывают исключение «недействительный оператор <». Как изменить эту функцию, чтобы программа работала нормально?sort C++ - «недействительный оператор»

+2

Могу ли я спросить, почему вы включаете все эти файлы, когда вам нужно не более 4 из них? – Borgleader

+1

@Mahmoud Arafa Это условие abs (i-j)! = -1 всегда равно истинному независимо от сравниваемых значений. :) –

+1

@Borgleader Просто у него не было времени, чтобы включить все заголовки C++. :) –

ответ

2

Как изменить эту функцию, чтобы программа работала нормально?

Предполагаете, что хотите сортировать по возрастанию. Просто используйте operator <.

bool fun(int i, int j) 
{ 
    return i < j; 
} 

В качестве альтернативы вы можете просто использовать компаратор, предусмотренный стандартом.

sort(v.begin(), v.end(), std::less<int>()); 

Смотрите ссылку в комментариях или ответ предоставленный @DanielDaranas, чтобы понять, почему ваша оригинальная функция не работает.

4

Ваш fun функция не предоставляет строгий слабый порядок. Если i и j равны, он вернет true. Таким образом, вы не соблюдаете правила. Реализация стандартной библиотеки отвечает путем исключения исключения.

+0

Я получил его, но я попытался изменить функцию, чтобы он мог обеспечить строгий слабый порядок, но я не мог. Любая помощь? –

+0

@MahmoudArafa Вы пробовали i

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