假设我有两个数组
names[5]={a,b,c,d,e];
marks[5]={3,2,6,7,2};
现在我使用内置函数对标记数组进行排序。如何按照与标记数组相同的顺序排列名称数组?
答案 0 :(得分:2)
由于每个名称显然与商标相关联,因此您通常需要创建一个包含一个名称及其相关商标的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; });
根据每个mark
的{{1}}字段,注意最后一点指定如何进行排序。
从那里我们可能(例如)想要按标记值按顺序打印标记:
foo
答案 1 :(得分:0)
使用STL中的std :: pair创建一个数组(向量会更好,如下所示)。然后对对数组进行排序。以下是一个示例(try it live):
#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
标志。