Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> PointerContainer 
:(
    Опции темы
kapusta007
Дата 13.3.2019, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 10.7.2016

Репутация: нет
Всего: нет



добрый вечер!
Начал изучать boost по https://theboostcpplibraries.com/ в разделе PointerContainer (https://theboostcpplibraries.com/boost.pointer_container) в конце задача: создать множество классов animal  и вставить их в контейнеры и потом одно полю отсортировать. 
при сортировке
Код
sort () или boost::indirect_fun<std::less<>>
 выдает ошибку не могу понять как ее решить?
Код

Ошибка    C2678    бинарный "=": не найден оператор, принимающий левый операнд типа "T" (или приемлемое преобразование отсутствует)    




вот код.
Код

#include <boost/ptr_container/ptr_vector.hpp>
#include <boost/ptr_container/indirect_fun.hpp>
#include <boost/ptr_container/ptr_inserter.hpp>
#include <string>
#include <array>
#include <algorithm>
#include <memory>
#include <functional>
#include <iostream>
#include <sstream>

using namespace std;

class animal
{
public:
    animal() :legs(0), has_tail(0), name("")
    {
        ostringstream stream;
        stream << legs << ", " << has_tail << ", ";
        outstring = stream.str();
        outstring += name;
    }
    animal(int leg, int tail, std::string n):legs(leg), has_tail(tail), name(n)
    {
        ostringstream stream;
        stream << legs << ", " << has_tail << ", ";
        outstring = stream.str();
        outstring += name;
    }
    operator const char*()const {return outstring.c_str();}
    int legs;
    int has_tail;
    std::string name;
    string outstring;
};

bool sort_pri(const animal & a1, const animal & a2)
{
    return (a2.legs < a1.legs);
}

int main()
{
    //boost::ptr_vector<animal, boost::inderect_fun<std::less<animal>> v;
    boost::ptr_vector<animal> v;
    v.push_back({ new animal(2,1,"b") });
    v.push_back({ new animal(5,1,"f") });
    v.push_back({ new animal(3,1,"c") });
    v.push_back({ new animal(1,1,"A") });
    v.push_back({ new animal(4,1,"d") });
    sort(v.cbegin(), v.cend(),[](const animal & a1, const animal & a2)->bool {return (a1.legs < a2.legs); });
    
    for (auto elem = v.cbegin(); elem != v.cend(); ++elem)
        cout << elem->outstring << endl;
    return 0;
}

PM MAIL   Вверх
kapusta007
Дата 13.3.2019, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 10.7.2016

Репутация: нет
Всего: нет



разобрался
Код

   sort(v.cbegin(), v.cend(),[](const animal & a1, const animal & a2)->bool {return (a1.legs < a2.legs); });


решение в следующем надо было использовать  обычные итераторы.
теперь работает все вот исправленная версия
Код

   sort(v.begin(), v.end(),[](const animal & a1, const animal & a2)->bool {return (a1.legs < a2.legs); });


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1115 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.