передача большего количества данных в std: установить класс сравнения - PullRequest
5 голосов
/ 24 февраля 2010

У меня есть std :: set с классом Compare, который требует дополнительного параметра для сравнения ключей. Этот переменный параметр определяется во время выполнения, и я упаковываю его в ключи набора, чтобы сделать его доступным для сравнения.

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

Есть ли элегантный способ передать дополнительный параметр в класс Compare? (Сначала я подумал о set :: value_comp, но он возвращает объект сравнения по значению, а мне нужна ссылка).

Спасибо.

1 Ответ

0 голосов
/ 24 февраля 2010

Определение std :: set:

template <
      class Key, 
       class Traits=less<Key>, 
       class Allocator=allocator<Key> 
>
class set

Так что Traits is должен быть вашим оператором сравнения, но если вы посмотрите на конструктор, вы можете увидеть его снова:

explicit set(
   const Traits& _Comp
);

Так что просто передайте свой экземпляр конструктору.(Обратите внимание, что это делается путем копирования)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...