Я пытаюсь сортировать
std::vector< std::vector< std::string> > perm;
Я пытаюсь использовать std::sort
из заголовка алгоритма
Я позвонил с
std::sort( perm.begin(), perm.end(), sortPerms);
Это моя функция сортировки:
bool sortPerms (const std::vector<std::string> &i, const std::vector<std::string> &j) {
for(unsigned int x = 0; x < i.size(); x++) {
if(i[x] != j[x])
return false;
}
//both are equal
return true;
}
Целью сортировки является вызов std :: unique для получения вектора с уникальными значениями.
Когда я компилирую с gcc в cygwin, я не получаю ошибок, но у меня есть повторы, и когда я компилирую с Visual Studio 2010, я получаю ошибку, что оператор< не определено.
Я прошел через него, и он пытается использовать свою собственную функцию сортировки, а не ту, которую я определил.
Я не уверен, как это исправить, какие-либо предложения?
Другие детали:
Гарантируется, что все векторы будут одинакового размера.
Его целью является вектор каждой перестановки исходного вектора строк.
Каждая строка — это команда, и я ищу все различные способы, которыми эти команды могут быть перетасованы. Так что мне нужно раздеть дубликаты.
Ваша функция сортировки должна вернуться, когда a < b
не a != b
,
Также по умолчанию std::vector<>
должен уже поддерживать лексикографическое сравнение через operator<
, который должен делать то, что вы ожидаете (сравнить каждый элемент по очереди, с первыми неэквивалентными элементами, используемыми для сравнения). Увидеть http://en.cppreference.com/w/cpp/container/vector/operator_cmp
Ваша текущая функция sortPerms выглядит так, как вы бы передали std::unique
, но это поведение отличается от предиката, используемого для std::sort
,
Других решений пока нет …