2015-01-17 2 views
-1

의 내가 지금은 붙박이 기능을 사용하여 마크 배열을 정렬 두 배열 배열을 다른 배열로 배열하는 방법은 무엇입니까?

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

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

있다고 가정 해 봅시다. 이름 배열을 마크 배열과 같은 순서로 정렬하려면 어떻게해야합니까?

+0

@YuHao. –

+0

시도한 코드는 무엇입니까? –

+0

나는 아무 것도 시도하지 않았다. 나는 무엇을해야할지 모른다. 나는 동일한 색인을 가진 사람의 이름과 표식에 접근 할 수 있기를 원합니다 (표식 [1]은 이름 표식입니다 [1]). @benrudgers –

답변

2

각 이름은 분명히 마크와 연결되어 있으므로 일반적으로 하나의 이름과 관련 마크가 포함 된 struct을 생성하려고합니다.

std::sort(std::begin(marks), std::end(marks), 
      [](foo const &a, foo const &b) { return a.mark < b.mark; }); 

참고 기준으로 정렬을 수행하는 방법을 지정합니다 마지막 조금 :

foo marks[] = { { 'a', 3}, 
       { 'b', 2}, 
       { 'c', 6}, 
       { 'd', 7}, 
       { 'e', 2} 
      }; 

그런 다음 우리가 그 항목을 정렬 :

struct foo { 
    char name; 
    int mark; 
}; 

그런 다음 우리는 그 배열을 만들 각 foomark 필드 거기에서

우리는 수도 (예를 들어) 마크 값으로 순서대로 마크를 인쇄하려면 : 언어는 C++입니다

for (auto const &f : marks) 
    std::cout << f.name << "\t" << f.mark << "\n"; 
0

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)를 사용하여 다음의 예 (try it live)이다. g ++로이 코드를 컴파일하려면 -std=c++11 플래그를 사용해야합니다.

+0

감사합니다. @mustafa. 나는 초보자이므로 코드를 예제로 게시하여 사용법을 알 수 있습니다. –

관련 문제