@pixik

Как сделать так, чтобы std::set при добавлении объектов сравнивал на повторяемость по моим правилам?

Доброго времени, конкретно интересует примерно такая проблема.
Есть std::set
std::set<std::shared_ptr<CString>> mySet;
В него мне нужно добавлять объекты, причем я ожидаю от него их уникальность в смысле равенства строк CString.
std::shared_ptr<CString> a = std::shared_ptr<CString>(new CString("Abc"));
std::shared_ptr<CString> b = std::shared_ptr<CString>(new CString("Abc;lkjsdf"));
std::shared_ptr<CString> c = std::shared_ptr<CString>(new CString("Abc"));

mySet.insetr(a);
mySet.insetr(b);
mySet.insetr(c);

Ожидаю увидеть 2 строки.

Abc
Abc;lkjsdf

Объясните пожалуйста и посоветуйте литературу, чтобы такие вещи с пониманием делать самому.

Всем спасибо!
  • Вопрос задан
  • 3411 просмотров
Решения вопроса 1
bogolt
@bogolt
Указать ваш компаратор:

std::set<std::shared_ptr<CString>, MyCompare>
Который будет сравнивать значения внутри умных указателей.

Чтобы с пониманием делать такие вещи нужен опыт и некоторые навыки чтения литературы.

upd:
using namespace std;
typedef shared_ptr<string> SString;

class SharedLess
{
public:
    bool operator() (const SString& a, const SString& b) const
    {
        return *a < *b;
    }
};
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы