排序2组不同的数组

时间:2015-06-25 01:03:22

标签: c++ arrays sorting

int main(){
int arr[5] = {5,4,2,1,3 };
string arr1[5] = { "R","E","E","P","T"};
pair<int, string> pair[5];

for (int i = 0; i < 5; i++){
    pair[i] = make_pair(arr[i], arr1[i]);

}
system("pause");
return 0;

}

我有2个数组,一个int数组和string数组。现在我想对这些数组进行排序。如您所见,数字5与“&#39; R&#39;”相关联,而数字4与“E&#39;”相关联。我想将它们配对,然后按int从最小到最大的值对它们进行排序,因此排序的版本应该像

"1 2 3 4 5"
"P E T E R"

我查了一些方法并提出pair,但不完全确定如何使用它。我用错了吗?接下来我该怎么办?

2 个答案:

答案 0 :(得分:3)

最好使用地图:

std::map<int, char> letters{{5, 'R'}, {4, 'E'}, {2, 'E'}, {1, 'P'}, {3, 'T'}};

for (auto& letter : letters)
    std::cout << letter.second;

它根据键进行排序(在本例中为int),默认情况下按您的意愿排序。

编辑: 你也可以使用你已经拥有的东西,比如:

// sort array of pairs
std::sort(std::begin(pairs), std::end(pairs));

// print them out
for (auto& letterPair : pairs)
    std::cout << letterPair.second;

答案 1 :(得分:0)

如果您有C ++ 11编译器,可以按如下方式创建地图:

std::map<int, string> pair_map;

for (int i = 0; i < 5; i++){
   pair_map.emplace_back(arr[i], arr1[i]);

}

在c ++ 098中

    std::map<int, string> pair_map;

    for (int i = 0; i < 5; i++){
       pair_map.insert(make_pair(arr[i], arr1[i]));    
    }