Я пытаюсь изменить порядок по умолчанию элементов в множестве целых чисел, чтобы быть лексикографическими вместо числового, и я не могу получить следующий компилировать с г ++:Использования пользовательского станда :: установить компаратор
file.cpp:
bool lex_compare(const int64_t &a, const int64_t &b)
{
stringstream s1,s2;
s1 << a;
s2 << b;
return s1.str() < s2.str();
}
void foo()
{
set<int64_t, lex_compare> s;
s.insert(1);
...
}
Я получаю следующее сообщение об ошибке:
error: type/value mismatch at argument 2 in template parameter list for ‘template<class _Key, class _Compare, class _Alloc> class std::set’
error: expected a type, got ‘lex_compare’
, что я делаю неправильно?
на самом деле моя проблема оказалась дополнительная закрывание> в объявлении набора. Я закрываю вопрос как фиктивный. (с использованием функции прямого действия вместо функтора отлично подходит для STL) –
код в вопросе проще, чем вы предложили (для простого компаратора функций) и работает просто отлично. –
@ Omry: Мне было бы интересно узнать, какой компилятор вы используете: http://codepad.org/IprafuVf – 2010-04-12 09:21:27