установить тип компаратора ожидаемая ошибка - PullRequest
0 голосов
/ 01 ноября 2010

Простите, ребята, если это глупый вопрос. У меня есть набор целых чисел, которые я хочу отсортировать с помощью функционального объекта. Но когда я пытаюсь скомпилировать следующий код, я получаю сообщение об ошибке «Недопустимый аргумент шаблона для« _Pr », тип ожидаемый».


    class MySortedUser{
    vector < user* > & users;
    public:
 MySortedUser(vector < user* > & _users):users(_users)
 {
 }
 bool operator()(const int& A, const int& B) const
 {
  return (users[A]->username < users[B]->username);
 } 
   };
    void someFunction(vector < user* > & _users)
    {
      set< int, MySortedUser(_users) > MySet;  //error here
    }</p>

<p>
Подскажите, пожалуйста, что я делаю не так.

1 Ответ

1 голос
/ 01 ноября 2010

MySortedUser(_users) - это выражение (оно создает объект MySortedUser). Объект построен во время выполнения . Шаблоны должны быть созданы во время компиляции .

Вам необходимо указать std::set тип в качестве аргумента шаблона и созданный компаратор в качестве аргумента конструктора:

std::set<int, MySortedUser> MySet(MySortedUser(_users));
...