Потомок от std::set с лямбда функцией сравнения

197
14 июля 2018, 07:00
#include <set>
#include <functional>
class C
{
public:
    C(const std::string& address) :
        mAddress(address)
    {};
    virtual const std::string& Address() const
    { 
        return mAddress;
    };
private:
    std::string mAddress;
};
class SetC :public std::set<C*, std::function<bool(const C*, const C*)>>
{
};

Подскажите где прописать код лямбда функции сравнения, например, такой:

[](const C* pC1, const C* pC2) {return pC1->Address() < pC2->Address(); }
Answer 1

В конструкторе:

using Comp = std::function<bool(const C*, const C*)>;
SetC()
    : std::set<C*, Comp>(
            Comp([](const C* pC1, const C* pC2) {
                    return pC1->Address() < pC2->Address();
            }))
{}

При этом вообще STL-контейнеры не очень хорошо переносят хранение указателей (кто-то должен отдельно за этими указателями следить; для векторов явственно нарушается locality и т.п.). Плюс виртуальный метод, возвращающий ссылку на строку тоже выглядит таинственно и необычно.

READ ALSO
Трёхмерный массив с пропусками (C++, map)

Трёхмерный массив с пропусками (C++, map)

У меня есть трёхмерный массив с вот таким объявлением:

240
Конструкторы классов

Конструкторы классов

Дословно вопрос звучит так "Define the constructor for class Z"Помогите разобраться что именно надо реализовать? Ну тип конструктор у класса Z уже есть, чего...

152
Интерфейсы и их реализация

Интерфейсы и их реализация

Не могу никак разобраться с интерфейсами и их реализациейОбьясните пожалуйста как их правильно реализовывать и как это хотя-бы примерно...

191