是否可以从函数返回两个向量?

问题描述 投票:0回答:5

我试图在 cpp 中对一个名为 x 的向量进行合并排序,该向量包含 x 坐标。当归并排序对 x 坐标进行排序时,它应该移动名为 y 的向量中的相应元素,其中包含 y 坐标。唯一的问题是我不知道如何(或者如果我可以)从合并函数返回两个结果向量。 或者,如果更容易实现,我可以使用较慢的排序方法。

c++ function return-value stdvector
5个回答
4
投票

不可以,您不能从本例中的方法返回 2 个结果。

vector<int>, vector<int> merge_sort();

您可以做的是通过引用函数传递 2 个向量,所得的合并排序向量会影响这 2 个向量...例如

void merge_sort(vector<int>& x, vector<int>& y);

最终,您可以执行@JoshD提到的操作,创建一个名为点的

struct
,并对点结构的向量进行合并排序。


1
投票

尝试这样的事情:

struct Point {
  int x;
  int y;
  operator <(const Point &rhs) {return x < rhs.x;}
};

vector<Point> my_points.

mergesort(my_points);

或者如果你想通过 y 坐标对 x 值相等的点进行排序:

另外,我想我应该补充一点,如果您确实需要,您可以随时返回

std::pair
。更好的选择通常是通过函数参数返回。

  operator <(const Point &rhs) {return (x < rhs.x || x == rhs.x && y < rhs.y);}

1
投票

是的,您可以返回一个元组,然后使用结构化绑定(C++17 起)。

这是一个完整的示例:

#include <cstdlib>
#include <iostream>
#include <numeric>
#include <tuple>
#include <vector>

using namespace std::string_literals;

auto twoVectors() -> std::tuple<std::vector<int>, std::vector<int>>
{
    const std::vector<int> a = { 1, 2, 3 };
    const std::vector<int> b = { 4, 5, 6 };
    return { a, b };
}

auto main() -> int
{
    auto [a, b] = twoVectors();
    auto const sum = std::accumulate(a.begin(), a.end(), std::accumulate(b.begin(), b.end(), 0));
    std::cout << "sum: "s << sum << std::endl;
    return EXIT_SUCCESS;
}

0
投票

你可以有一个向量的向量 => 向量点= {{a, b}, {c, d}}; 现在您可以返还积分了。


-2
投票

返回向量很可能不是您想要的,因为它们是为此目的而复制的(这很慢)。例如,看看这个实现

© www.soinside.com 2019 - 2024. All rights reserved.