在c ++中给出两个整数向量(相同的大小和类型),我想从最小到最大的元素对一个进行排序并更改第二个向量的顺序[重复]
Posted
技术标签:
【中文标题】在c ++中给出两个整数向量(相同的大小和类型),我想从最小到最大的元素对一个进行排序并更改第二个向量的顺序[重复]【英文标题】:Give two integer vectors in c++ (same size and type), I'd like to sort one from smallest to largest element and change the order of the second vector [duplicate] 【发布时间】:2015-03-28 21:44:46 【问题描述】:在 c++ 中给出两个整数向量(大小相同),我想将我的一个向量从最小元素到最大元素排序,并分别更改第二个向量的顺序。
如何在不使用 boost 库的情况下实现这一点?
谢谢。
【问题讨论】:
你的意思是如果数组一的第四个元素在前,那么数组二的第四个元素也应该在前? 这不是另一个问题的完全重复,因为这个问题说“不使用 boost”,而另一个说“最好使用 STL 或 Boost”。 @DouglasZare:“不使用 Boost”是“STL [sic] 或 Boost”的一半,并且接受的答案不使用 Boost。事实上,九个优秀答案中只有两个提到了 Boost(不包括boost::tie
和 boost::tuple
的建议,因为它们现在都在 C++ 标准库中),但只涉及标准库。我没有看到问题。这个问题很久以前就被问及回答了。
根据“我如何...”上一个问题的答案,您可以将向量配对,或者将至少一个向量放在一个类中并使用函数运算符(functor ) 或 std::sort 的 lambda 函数,将索引向量排序到第一个向量中,然后使用这些索引根据索引向量对第二个向量重新排序。
另一种选择是实现自己的排序,而不是使用 std::sort 或 std::stable_sort,以便自定义排序可以处理多个向量。
【参考方案1】:
您可以重构代码,以便使用S
的向量代替两个整数向量,其中S
是一个包含两个整数的结构。然后你可以定义一个特定的operator<
供排序函数使用。
这样做的好处是两组数据之间的严格耦合在它们的存储方式中得到了明确的说明。
【讨论】:
有人投了反对票。我想知道为什么,因为这是我每次遇到这种常见情况时都会做的事情。如果有什么理由不这样做,请详细说明。 我不认为这个答案直接回答了原始问题。先回答原文,再给出替代实现。如果没有,应留下替代方案作为评论。 但是这个答案解决了问题背后的问题。这就是问题几乎总能得到解决的方式,因为它简单、清晰、高效。 这是个好主意和好方法,但您确实没有回答提出的问题。以上是关于在c ++中给出两个整数向量(相同的大小和类型),我想从最小到最大的元素对一个进行排序并更改第二个向量的顺序[重复]的主要内容,如果未能解决你的问题,请参考以下文章