2015-12-04 3 views
-2

У меня есть некоторый вектор векторов, как это:Сортировка вектор векторов объектов

vector<vector<Object> > vec; 

У меня также есть на структуру для comp функции std::sort

struct SortByName { 
    bool operator() (Object& o1, Object& o2) { 
     return o1.getName() < o2.getName(); 
    } 
} _sortByName; 

Тогда я инициализировать мой метод сортировки:

void Object::sort_by_name() { 
    std::sort(vec.begin(), vec.end(), _sortByName); 
} 

Но это не сработало для меня.

Итак, у меня есть два класса. Один класс просто заполняет объекты другого класса внутри вектора. Затем я делаю больше векторов объекта и вставляю их в вектор векторов. И затем я хочу отсортировать объекты вектора внутри большого вектора по имени или что-то еще.

+1

любая догадка почему? просмотрите то, что вы написали. –

+0

Пожалуйста, положите некоторую работу в описание проблемы. И как только вы получите подробное описание проблемы, укажите MCVE. http://stackoverflow.com/help/mcve –

+0

@ user3653164 'vector >' is not 'vector ', если вы все еще не получите его. – LogicStuff

ответ

0

У вас есть vector, содержащий vector-s. У вас также есть объект функции, который может сортировать vector-s, которые содержат Object-с. Это означает, что ваш сортировочный функтор может сортировать vector<Object> -s, а не vector<vector<Object>> -s.

Вы должны написать еще один функтор, который может сортировать vector<vector<Object>> -s, например, исходя из их размера.

0

Если у вас есть это:

vector<vector<Object>> vec; 

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

for(auto &nested_vec : vec) 
    std::sort(nested_vec .begin(), nested_vec .end(), _sortByName); 

или только один конкретный вложенная вектор:

std::sort(vec[index].begin(), vec[index].end(), _sortByName); 

Это просто. Однако, если вы хотите выполнить сортировку между вложенными векторами, для этого потребуется более сложный алгоритм, и вам следует задать вопрос, почему вы решили использовать вектор векторов в первую очередь.

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