📅  最后修改于: 2023-12-03 15:37:34.565000             🧑  作者: Mango
当我们使用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格式:
当我们使用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中的元素,以验证向量已正确排序。