📜  在C++ STL中对向量排序后,跟踪先前的索引(1)

📅  最后修改于: 2023-12-03 15:37:34.565000             🧑  作者: Mango

在C++ STL中对向量排序后,跟踪先前的索引

当我们使用STL中的sort函数对向量进行排序时,通常会丢失原有元素的索引。然而,在某些情况下,我们可能需要跟踪先前的索引,以便在排序后更容易地访问数据。

在C++ STL中,我们可以通过创建一个带有索引的向量来解决这个问题。这可以通过使用pair类型实现,其中第一个元素是原始向量的值,第二个元素是该值在原始向量中的索引。然后,我们对该pair类型的向量进行排序,以便根据原始向量的值排序,而不是根据索引排序。最后,我们可以使用已排序的pair向量的索引访问原始向量中的元素。

下面是一个示例程序,它演示了如何在C++ STL中对向量排序后跟踪先前的索引:

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

using namespace std;

int main() {
    vector<int> v = {5, 2, 8, 3, 1};
    vector<pair<int, int>> vp(v.size());

    for (int i = 0; i < v.size(); i++) {
        vp[i] = make_pair(v[i], i);
    }

    sort(vp.begin(), vp.end());

	// 显示排序后的向量
    for (auto p : vp) {
        cout << p.first << " ";
    }
    cout << endl;

	// 使用排序后的索引访问原始向量
    for (auto p : vp) {
        cout << v[p.second] << " ";
    }
    cout << endl;

    return 0;
}

在上面的程序中,我们首先创建了一个整数向量v,其中包含一些随机值。然后,我们创建了一个与v相同大小的pair类型向量vp,并通过循环将每个元素的值和索引存储在pair中。接下来,我们使用sort函数对vp向量进行排序,以便根据原始向量v的值排序。最后,我们使用已排序的pair向量的索引访问原始向量v中的元素,以验证向量已正确排序。

返回的markdown格式:

在C++ STL中对向量排序后,跟踪先前的索引

当我们使用STL中的sort函数对向量进行排序时,通常会丢失原有元素的索引。然而,在某些情况下,我们可能需要跟踪先前的索引,以便在排序后更容易地访问数据。

在C++ STL中,我们可以通过创建一个带有索引的向量来解决这个问题。这可以通过使用pair类型实现,其中第一个元素是原始向量的值,第二个元素是该值在原始向量中的索引。然后,我们对该pair类型的向量进行排序,以便根据原始向量的值排序,而不是根据索引排序。最后,我们可以使用已排序的pair向量的索引访问原始向量中的元素。

下面是一个示例程序,它演示了如何在C++ STL中对向量排序后跟踪先前的索引:

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

using namespace std;

int main() {
    vector<int> v = {5, 2, 8, 3, 1};
    vector<pair<int, int>> vp(v.size());

    for (int i = 0; i < v.size(); i++) {
        vp[i] = make_pair(v[i], i);
    }

    sort(vp.begin(), vp.end());

    // 显示排序后的向量
    for (auto p : vp) {
        cout << p.first << " ";
    }
    cout << endl;

    // 使用排序后的索引访问原始向量
    for (auto p : vp) {
        cout << v[p.second] << " ";
    }
    cout << endl;

    return 0;
}

在上面的程序中,我们首先创建了一个整数向量v,其中包含一些随机值。然后,我们创建了一个与v相同大小的pair类型向量vp,并通过循环将每个元素的值和索引存储在pair中。接下来,我们使用sort函数对vp向量进行排序,以便根据原始向量v的值排序。最后,我们使用已排序的pair向量的索引访问原始向量v中的元素,以验证向量已正确排序。