Сортировка векторов по их размерам — распространенная задача в программировании. В этой статье мы рассмотрим несколько методов выполнения этой задачи, сопровождаемые примерами кода на популярных языках программирования. К концу этой статьи вы получите четкое представление о различных методах сортировки и сможете выбрать тот, который соответствует вашим потребностям.
Методы и примеры кода:
- Использование пользовательского компаратора (C++):
Один из способов сортировки векторов по размеру — использование пользовательской функции компаратора. Функция сравнения сравнит размеры внутренних векторов и вернет true или false соответственно. Вот пример на C++:
#include <vector>
#include <algorithm>
bool compare(const std::vector<int>& a, const std::vector<int>& b) {
return a.size() < b.size();
}
int main() {
std::vector<std::vector<int>> vecOfVecs = { {1, 2, 3}, {4, 5}, {6}, {7, 8, 9, 10} };
std::sort(vecOfVecs.begin(), vecOfVecs.end(), compare);
// Output the sorted vector of vectors
for (const auto& vec : vecOfVecs) {
for (const auto& elem : vec) {
std::cout << elem << " ";
}
std::cout << std::endl;
}
return 0;
}
- Использование лямбда-функции (Python):
В Python мы можем использовать лямбда-функцию в качестве ключа к функцииsortedдля выполнения сортировки на основе размеров векторов. Вот пример:
vec_of_vecs = [[1, 2, 3], [4, 5], [6], [7, 8, 9, 10]]
sorted_vec_of_vecs = sorted(vec_of_vecs, key=lambda x: len(x))
# Output the sorted vector of vectors
for vec in sorted_vec_of_vecs:
print(vec)
- Использование LINQ (C#):
В C# мы можем использовать LINQ (Language Integrated Query) для сортировки векторов по их размерам. Вот пример:
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main()
{
List<List<int>> vecOfVecs = new List<List<int>>()
{
new List<int> {1, 2, 3},
new List<int> {4, 5},
new List<int> {6},
new List<int> {7, 8, 9, 10}
};
var sortedVecOfVecs = vecOfVecs.OrderBy(vec => vec.Count).ToList();
// Output the sorted vector of vectors
foreach (var vec in sortedVecOfVecs)
{
foreach (var elem in vec)
{
Console.Write(elem + " ");
}
Console.WriteLine();
}
}
}