[英]How do I arrange an array in terms of another?
假设我有两个数组
names[5]={a,b,c,d,e];
marks[5]={3,2,6,7,2};
现在,我使用内置函数对标记数组进行排序。 如何以与marks数组相同的顺序排列名称数组?
由于每个名字显然与标记相关的,通常要创建一个struct
,它包含一个名称及其相关标志。
struct foo {
char name;
int mark;
};
然后我们创建一个数组:
foo marks[] = { { 'a', 3},
{ 'b', 2},
{ 'c', 6},
{ 'd', 7},
{ 'e', 2}
};
然后,我们对这些项目进行排序:
std::sort(std::begin(marks), std::end(marks),
[](foo const &a, foo const &b) { return a.mark < b.mark; });
请注意最后一点,它根据每个foo
的mark
字段指定如何进行排序。
从那里,我们可能(例如)希望按标记值按顺序打印出标记:
for (auto const &f : marks)
std::cout << f.name << "\t" << f.mark << "\n";
通过使用STL中的std :: pair来制作成对的数组(向量会更好,如下所示)。 然后对对数组进行排序。 这是一个示例( 尝试一下 ):
#include <iostream>
#include<vector>
#include<string>
#include <algorithm>
using namespace std;
int main()
{
vector<pair<int,string>> v;
v.push_back({10,"John"});
v.push_back({5,"Katarina"});
sort(v.begin(), v.end());
for(int i=0;i<v.size();++i)
{
cout<<v.at(i).first<<" "<<v.at(i).second<<endl;
}
return 0;
}
注意:此示例使用C ++ 11。 要使用g ++编译此代码,您需要使用-std=c++11
标志。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.