繁体   English   中英

如何按另一个排列数组?

[英]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; });

请注意最后一点,它根据每个foomark字段指定如何进行排序。

从那里,我们可能(例如)希望按标记值按顺序打印出标记:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM