如何根据另一个排列数组?

时间:2015-01-17 03:47:54

标签: c++ arrays sorting

假设我有两个数组

names[5]={a,b,c,d,e]; 

marks[5]={3,2,6,7,2}; 

现在我使用内置函数对标记数组进行排序。如何按照与标记数组相同的顺序排列名称数组?

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标志。