2015-03-02 4 views
-3

Я хочу запустить функцию C++ nth_element в векторе structs, но я не уверен, как заставить его работать.nth_element на векторе structs C++

Вот мой текущий код:

struct Point { 
    int x, y, color; 
}; 

bool compareByY (const Point &a, const Point &b) 
{ 
    return a.y < b.y; 
} 

nth_element(points.begin(), points.size() + points.size()/2, points.end(), compareByY); 
+1

Что пошло не так? Какой результат вы ожидаете? – Yakk

+2

Пожалуйста, прочтите, http: //www.cplusplus.com/reference/algorithm/nth_element/? Kw = nth_element –

ответ

4

Я полагаю, что этот призыв к nth_element произвел ошибку компиляции, возможно, один из тех непонятных ошибок лиха шаблонов C++. Но, по крайней мере, должна была быть какая-то подсказка.

Второй аргумент - points.size() + points.size()/2 - не является итератором в контейнер; это целое число. Вы имели в виду points.begin() + points.size()/2.

2

арифметическая операция points.size() + points.size()/2 не дает итератор, это дает вам size_t. nth_element нуждается в итераторе в качестве второго параметра.

Я предполагаю, что это была только опечатка с size против begin. Вот исправление:

points.begin() + points.size()/2 
+1

Это неверно: третий аргумент nth_element является итератором в один конец прошлого, как и предусмотрено , – rici