Да, самый простой способ - переопределить оператор <внутри вашего класса, и в этом случае вам не нужно беспокоиться о comp.</p>
Параметр comp - это указатель на функцию, который переводит вектор в два итератора и возвращает истину или ложь в зависимости от того, как вы хотите, чтобы они были упорядочены.
Редактирование: не проверено, но того, чего стоит:
class myclass
{
public:
myclass() : m_a( 0 ){}
void operator = ( int a ) { m_a = a; }
private:
friend bool operator<( const myclass& lhs, const myclass& rhs ) { return lhs.m_a < rhs.m_a; }
int m_a;
};
int _tmain(int argc, _TCHAR* argv[])
{
myclass c;
std::vector<myclass> vec;
for( int i = 0; i < 10; ++i )
{
c = i;
vec.push_back( c );
}
//these two should perform the same given the same input vector
std::next_permutation( vec.begin(), vec.end() );
std::next_permutation( vec.begin(), vec.end(), &operator< );
return 0;
}