LINUX.ORG.RU

Структура как ключ в std::map

 ,


0

1

Бодрого всем. Скажите пожалуйста какие операторы надо перегрузить у класса, чтобы использовать как ключ в std::map?

class Class
{
};
typedef Class class_t;
std::map<class_t, std::string> s_m;
С++ редко юзаю, таких вещей не знаю, а тут понадобилось :-)

★★★★

Последнее исправление: FIL (всего исправлений: 1)

И да, ТС, если тебя задолбает конструировать новый экземпляр ключа для каждого лукапа (такое может быть, если структура у тебя просто объединяет несколько независимых ключей, которые в коде используются по отдельности), то смотри в сторону C++14, N3657 (кажется) и обобщённого std::less<void> (ну и tie/tuple), чтобы не писать бойлерплейт.

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

Я побаловался, == не вызывалось у меня, вообще.

FIL ★★★★
() автор топика
Ответ на: комментарий от intelfx

== ещё, ну. Если оно не само.

операторы «больше» и «равно» выводятся из одного оператора «меньше»

по теме: определи оператор «меньше», либо определи функтор «меньше» и передай в качестве параметра шаблона.

сам шаблон map выглядит так:

template<class Key, class T,
    class Compare = std::less<Key>,
    class Allocator = std::allocator<std::pair<const Key, T> >
> class map;

где в качестве функтора сравнения в смысле «меньше» используется std::less<Key>, который тупо возвращает lsh < rhs, т.е. использует определенный оператор «меньше» для Key

anonymous
()
Ответ на: комментарий от drsm

А где почитать, почему оно так? Ведь простое сравнение на равенство должно быть быстрее в большинстве случаев?

staseg ★★★★★
()
Ответ на: комментарий от staseg

А хотя я наверное сам сообразил. Оно же в пробегается по дереву в любом случае сравнивая на больше-меньше для принятия решения о ветвлении.

staseg ★★★★★
()

Один вопрос: зачем тебе это надо?

invy ★★★★★
()
Ответ на: комментарий от anonymous

И? Он выводится из меньше внутри мапы.

Дунно, на самом деле, что он там имел ввиду в том посте.

Kuzy ★★★
()
Ответ на: комментарий от invy

Почему два? Equality никогда не генерится в плюсах. Единственное что может произойти, это неявное преобразование к какому-нибудь типу у которого есть такой оператор (ну или free функция).

Kuzy ★★★
()
Последнее исправление: Kuzy (всего исправлений: 1)

операторы «больше» и «равно» выводятся из одного оператора «меньше»

по теме: определи оператор «меньше», либо определи функтор «меньше» и передай в качестве параметра шаблона.

сам шаблон map выглядит так:

template<class Key, class T, class Compare = std::less<Key>, class Allocator = std::allocator<std::pair<const Key, T> >

class map;

где в качестве функтора сравнения в смысле «меньше» используется std::less<Key>, который тупо возвращает lsh < rhs, т.е. использует определенный оператор «меньше» для Key ege.org.ru ege.net.ru

katenka141
()
Ответ на: комментарий от katenka141

ege.org.ru ege.net.ru

Катюш, не переживай, на ЕГЭ этого нет

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.