C++ 同步排序多个向量
假设我想根据向量A按升序对向量A、B和C进行排序,这样向量B和C就会相应地改变。如果向量A包含两个或多个相同的元素,则相应向量C上的较大值将优先考虑。举个例子C++ 同步排序多个向量,c++,algorithm,sorting,vector,C++,Algorithm,Sorting,Vector,假设我想根据向量A按升序对向量A、B和C进行排序,这样向量B和C就会相应地改变。如果向量A包含两个或多个相同的元素,则相应向量C上的较大值将优先考虑。举个例子 A=25,10,10,5,5 B=12,14,3,45,6 C=123,23,12,45,76 在分类之后,它看起来是这样的 A=5,5,10,10,15 B=6,45,14,3,12 C=76,45,23,12,123 谁能告诉你如何编写C++程序?哪个库可以用这个?,你可以使用 zip < /Cord>视图: std::v
A=25,10,10,5,5
B=12,14,3,45,6
C=123,23,12,45,76
在分类之后,它看起来是这样的
A=5,5,10,10,15
B=6,45,14,3,12
C=76,45,23,12,123
谁能告诉你如何编写C++程序?哪个库可以用这个?
,你可以使用<代码> zip < /Cord>视图:std::vector A = {25,10,10,5,5};
std::vector B = {12,14,3,45,6};
std::vector C = {123,23,12,45,76};
auto r = ranges::view::zip(A, B, C);
ranges::sort(r,
std::less<>{},
[](const auto& tup){
return std::make_tuple(std::get<0>(tup), -std::get<2>(tup));
});
std::向量A={25,10,10,5,5};
向量B={12,14,3,45,6};
向量C={123,23,12,45,76};
自动r=范围::视图::zip(A、B、C);
范围::排序(r,
std::less{},
[](常量自动和tup){
返回std::make_tuple(std::get(tup),-std::get(tup));
});
(您可以创建自定义比较器,而不是使用投影“欺骗”并否定C值)
A=25,10,10,5,5
——如果10
或5
不在连续位置怎么办?您如何知道排序标准中使用了哪一个10
或哪一个5
?通常,当我看到关于排序一个容器的问题时,第二个(或第三个!)容器的排序会根据该排序进行更改,这通常表示您需要一个复杂数据类型的单一容器,例如std::vector
或std::vector
@PaulMcKenzie,然后我们可以检查C的相应值。这意味着向量A的第二个元素与向量B和C的第二个元素相连。同样,向量B的第三个元素与向量B和CCAN的第三个元素有关,有谁能通过我的例子来帮助我理解,并用C++程序来证明它?哪个部分你不理解?创建自定义数据类型,或者根据您声明的规则对该数据类型进行排序?我建议的方法需要一个结构和一个自定义比较操作。