gpt4 book ai didi

c++ - 根据偶数对整数 vector 进行排序

转载 作者:行者123 更新时间:2023-11-30 00:44:05 26 4
gpt4 key购买 nike

我有一个包含偶数个元素的整数 vector 。位置 0 和 1 的元素属于一起,位置 2 和 3 的元素相同,等等......

我想根据偶数元素对这个 vector 进行排序。奇数元素应与其对应的偶数元素保持在一起。我不想使用 boost,但我想使用 std::sort。

例子:
输入 = {4,40,5,50,3,30,2,20,1,10}
输出 = {1,10,2,20,3,30,4,40,5,50}

我想出了以下解决方案。这样安全吗?有更好的解决方案吗?

std::vector<int> values = {4,40,5,50,3,30,2,20,1,10};

auto begin = reinterpret_cast<std::array<int, 2>*>(values.data());
auto end = reinterpret_cast<std::array<int, 2>*>(values.data() + values.size());

std::sort(begin, end, [](const std::array<int, 2>& a, const std::array<int, 2>& b)
{
return std::get<0>(a) < std::get<0>(b);
});

编辑:我还应该提到我无法将 vector 更改为对 vector 。当然,总是可以将内容复制到成对的 vector 中,但我对使用较少内存的解决方案很感兴趣。

最佳答案

假设您绝对不能修改存储数据的方式,并且没有心情编写自己的排序例程,这样做的一种方法是使用可怕的 std::qsort .

在您的示例中,这将是(感谢@chux 发现潜在的溢出并感谢@JeJo 注意到不正确的大小):

std::vector<int> values = {4,40,5,50,3,30,2,20,1,10};
std::qsort(values.data(), values.size() / 2, sizeof(values[0]) * 2, [](const void* a, const void* b) {
const int* a_1 = static_cast<const int*>(a);
const int* b_1 = static_cast<const int*>(b);
return (*a_1 > *b_1) - (*a_1 < *b_1);
});

请注意,众所周知,std::sortstd::qsort 更快,有时非常明显。

关于c++ - 根据偶数对整数 vector 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50916324/

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