У меня есть много точек (a, b), и я сохранил координату x в координатах [] и y в b []. Теперь мне нужно отсортировать эти точки по координате x или y-координате. Я знаю, что в C++ существует концепция пар, но есть ли лучший способ сделать это. Пожалуйста, дайте ответы на C/C++.Любая альтернатива для пар?
ответ
Вы можете сохранить пару координат, используя std::pair<int, int>
, или как ответ by @Gopi указывает на struct
.
Коллекция любого из них может быть отсортирована по координате X или по координате Y с использованием лямбда-функции, функтора или глобальной функции.
// A vector of vertices.
std::vector<std::pair<int, int>> vertices;
// Sort the vertices by X coordinates using a lambda function to order them
std::sort(vertices.begin(), vertices.end(),
[](auto const& a, auto const& b) { return a.first < b.first; });
// Sort the vertices by Y coordinates using a lambda function to order them
std::sort(vertices.begin(), vertices.end(),
[](auto const& a, auto const& b) { return a.second < b.second; });
'pair' уже имеет функцию сравнения , он сравнивает «first», и если они равны, он сравнивает «second», поэтому вам не нужно передавать лямбду на первый вид там. –
@JonathanMee, правда. Если пользователь хочет сортировать их только по координате X и игнорировать координату Y, то функция сравнения необходима. –
struct vertex
{
int x;
int y;
};
Затем сортировать конструкции соответствующим образом.
Не могли бы вы рассказать о том, как отсортировать массив этих структур с помощью функции sort() C++ –
@ user3901994 'std :: sort (std :: begin (an_array), std :: end (an_array), [] (vertex const & a, vertex const & b) {return ax
@cdhowie Я думаю, что это важно отметить, что ваш компартер использует функции лямбда и нуждается в компиляции флага C++ 11. – Mustafa
Вы можете использовать struct
, как указано и показано в других ответах. Однако, если вы определяете свою собственную структуру, вам нужно будет определить функцию компаратора для использования с алгоритмом сортировки или перегрузить оператор <
.
Преимущество использования std::pair
состоит в том, что вам не нужно определять компаратор, потому что std::pair
перегружает оператора <
для сортировки по первому элементу сначала, затем по второму элементу. См. Этот пример answer.
* «' std :: pair - то, что вам не нужно будет определять компаратор »* - это, безусловно, стоит упомянуть, но работает только для увеличения порядка' .first' ... –
Лучший способ - это как ответ от @Gopi. Для лексикографической сортировки вы можете использовать std :: tie (http://en.cppreference.com/w/cpp/utility/tuple/tie).
struct vertex
{
int x;
int y;
bool less_x(const struct vertex& b) const { return std::tie(x,y) < std::tie(b.x, b.y); }
bool less_y(const struct vertex& b) const { return std::tie(y,x) < std::tie(b.y, b.x); }
};
int c = x*n + y where, n>x and n>y
x=c/n
y=c%n
Когда вам нужно x
просто c/n
даст x
и y
использования c%n
дает у.
Примечание: Работы для положительных координат только
- 1. Любая альтернатива для Apache Nutch?
- 2. Любая другая альтернатива для require.js?
- 3. Любая бесплатная альтернатива Robohelp?
- 4. Любая альтернатива пиренейской колотушке?
- 5. Любая альтернатива @GrabConfig?
- 6. любая более быстрая альтернатива?
- 7. Самостоятельный объект - любая альтернатива
- 8. Любая альтернатива ограничениям?
- 9. Любая альтернатива карте Mapcurl?
- 10. Любая альтернатива fstat?
- 11. Любая альтернатива движку Alternativa3D?
- 12. Любая альтернатива PostSharp?
- 13. MyLocationOverlay устарел, любая альтернатива?
- 14. Любая хорошая альтернатива для контроля проверки ASP.NET?
- 15. Любая свободная альтернатива для Oracle SQL Developer
- 16. Любая альтернатива drupal_json для вывода не JSON
- 17. Любая альтернатива LINQ для цикла в отражении?
- 18. Любая альтернатива API для частного использования?
- 19. Любая альтернатива для преобразования числа в строку?
- 20. c2dm не поддерживается, любая альтернатива?
- 21. Ванильная альтернатива функции jQuery $ .data(): любая собственная альтернатива javascript?
- 22. Webpack DefinePlugin медленность. Любая альтернатива?
- 23. BackupManager - любая альтернатива «bmgr wipe»?
- 24. Mercurial ненадежные субрепозиции. Любая альтернатива?
- 25. Любая альтернатива шаблонам страниц ASP.NET?
- 26. icu4j слишком большой, любая альтернатива?
- 27. Что такое OpenSAML? Любая альтернатива?
- 28. Любая нулевая безопасная альтернатива ArrayList.addAll?
- 29. Любая альтернатива Обложке на Дженкинсе?
- 30. Любая альтернатива для сетки для использования в IE6 +?
Я не могу представить себе лучший способ хранения пар двух целых чисел, то в структурах паров двух целых чисел. –
Вы спрашиваете о C или C++ или хотите что-то, что работает в обоих? – immibis
Вы можете создать пользовательский итератор для 'a', чтобы при его сортировке он также изменял порядок в' b', чтобы оставаться последовательным. –