gpt4 book ai didi

c++ - C++ 中 vector 的 vector 排序

转载 作者:行者123 更新时间:2023-12-03 07:53:57 26 4
gpt4 key购买 nike

我们可以对 vector 的 vector 进行排序吗:

{[7, 2], [1, 8], [3, 4]}

使用std::sort(vec.begin(), vec.end()),根据每个 vector 中的第一个元素按升序排列,或者我们是否需要将自定义比较器函数传递给std::sort

最佳答案

您可以对 vector 的 vector 进行排序,而无需任何自定义比较器。如果您不提供,则 std::vector::operator< 将会被使用。该运算符对内部元素执行字典顺序比较。

例如:

#include <vector>
#include <iostream>
#include <algorithm>

int main()
{
std::vector<std::vector<int>> vecs{{7, 2}, {1, 8, 5}, {3}};

// until C++20
std::sort(vecs.begin(), vecs.end());

// since C++20
std::ranges::sort(vecs);

for (const auto &v : vecs) {
for (int x : v) {
std::cout << x << ' ';
}
std::cout << '\n';
}
}

输出

1 8 5 
3
7 2

注意:operator<首先会比较第一个元素,如果两个 vector 中的元素相同,则会比较其余元素。如果您只想比较第一个元素以节省性能,您仍然需要一个自定义比较器,可以按如下方式执行:

// since C++11, could also be written as a lambda expression
struct first_element_compare {

/* static since C++23*/
constexpr bool operator()(const std::vector<int>& a,
const std::vector<int>& b) const
{
// FIXME: this code crashes when a or b is empty
// we must decide how these vectors compare to each other
return a.front() < b.front();
}
};

// ...

// until C++20
std::sort(vecs.begin(), vecs.end(), first_element_compare{});

// since C++20
std::ranges::sort(vecs, first_element_compare{});

关于c++ - C++ 中 vector 的 vector 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76508290/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com