gpt4 book ai didi

c++ - 如何排序 std::vector 忽略某些数字?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:21:13 24 4
gpt4 key购买 nike

我正在尝试对数字 vector 进行排序并忽略某个数字,即将其保留在原位。 This answer实际上并没有将元素留在它被发现的地方。

例如,如果我有以下内容

std::vector<int> test{5, 3, 8, 4, -1, 1, 11, 9, 6};
std::sort(test.begin(),
std::partition(test.begin(), test.end(), [](int n)
{return n != -1;}));

test 排序为 1 3 4 5 6 8 9 11 -1。我搜索了几个小时,修改了两个自定义比较器并使用了 std::partition,但我无法想出一个将 test vector 分类为 的解决方案>1 3 4 5 -1 6 8 9 11。这真的很难吗?

最佳答案

根据@Bathsheba 在他的回答中提到的补救措施,以及欺骗 std::sort() 的谓词,可以实现如下解决方案:

DEMO

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

int main()
{
std::vector<int> test{5, 3, 8, 4, -1, 1, 11, 9, 6};
// get the position of -1
auto itr = std::find(test.begin(), test.end(), -1);
// sort all elements so that -1 will be moved to end of vector
std::sort(test.begin(), test.end(), [](const int& lhs, const int& rhs )
{
if( lhs == -1 ) return false;
if( rhs == -1 ) return true;
return lhs < rhs;
});

test.erase(test.end()-1); // now erase it from end
test.insert(itr, -1); // insert to the earlier position

for(const auto& it: test) std::cout << it << " ";

return 0;
}

关于c++ - 如何排序 std::vector 忽略某些数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50447484/

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